我遇到一个需要处理中文字符的问题。刚开始想用wchar_t存储,比如”你好.世界”,编码成:
wchar_t *var = "你好.世界";
实际占用10个字节
C4 E3 BA C3 2E 00 CA C0 BD E7 00
而如果这样编码:
char *var = "你好.世界";
实际占用9个字节
C4 E3 BA C3 2E 00 CA C0 BD E7 00
造成这种差别的,就是变量类型的不同,而变量类型,是由编译器识别和处理的,与文件的编码方式(GBK,UTF-8)无关。我的设想是编译器将文件读到内存,所有字符统一转换成UNICODE编码,这样就不存在差异了,然后根据类型再封装成二进制流,也没有了差别。
但实际上,我切换了文本的编码为UTF-8,结果出人意料,实际存储占用13个字节:
E4 BD A0 E5 A5 BD 2E E4 B8 96 E7 95 8C 00
所以,实际存储的字节流既跟文件编码有关,也跟变量的类型有关。