---恢复内容开始---
我在CPP文件中,打算输出一行阿拉伯字符:
当试图运行时,会弹出以下提示:
即便点击“是”,运行之后也是显示不出来的:
为什么会出现这种情况?
可以看到cpp文件的编码格式:
或者
介绍下GB2312是信息交换汉字编码字符集,适用于汉字处理、汉字通信等系统之间的信息交换,通行于中国大陆。
如果强制使用ASNI编码输出则会输出乱码:
如果按照Shift—JIS编码,会输出:
我们改为一段日文进行尝试:
输出结果就是正确的:
当我们把编码格式转变为朝鲜语时:
日文就显示不出来,但是其16进制编码还是可以显示出来的:
我们发现尽管日文没有显示出来,但是其编码是一样的。
个人认为,其实不论编码格式是怎样的,字符在内存当中的存在都是以固定的二进制形式存在的,只是你用不同的编码方式去解析它,它被不同的解析方式解析之后,显示出来的字符就不同。比如你用GB2312编码格式去解析日文编码格式,就能成功解析日文,原因是GB2312编码中涵盖了这些日文。再比如你用阿拉伯语言编码格式去解析这三个日文字符就解析成这样:
原因就在于虽然在内存中的存在是aaef、aabf、aab7这样的十六进制形式,但有可能你在使用的这个阿拉伯文编码格式中的阿拉伯字母编码都在3f以下,所以你只能解析3f以下的,这里的aaef、aabf、aab7显然超过了3f就被阿拉伯编码按照最大的3f进行解析了。
参考:
http://www.dreamdu.com/blog/2008/08/02/character_encoding/
http://www.cnblogs.com/xkfz007/articles/2566434.html
---恢复内容结束---
原文:http://www.cnblogs.com/predator-wang/p/4859860.html