这两天又被CEGUI的编码问题郁闷了,每次在编码问题都要纠结一下,这次彻底整理:
一、概述
1 Ascii
ASCII 只支持英语
ANSI编码 为了本地化,使用多个字节代替表示1个字符(GB2312 BIG5 JIS GBK)
2 UNICODE
UTF16 使用16位来存放一个序号(DBCS 宽字符模式)
3 UTF-8
不定长,不存在跨平台问题,中文一个占3个
二、例子
1 ASCII 使用一个字节存放一个字符(SBCS)
Kuma8dao7 4B 75 6D 61 38 64 61 6F 37
2 ANSI编码 为了本地化,使用多个字节代替1个字符(MBCS VC的一个字符选项)
飞鸟空(GB2312) B7 C9 C4 F1 BF D5
3 UTF16 使用16位存放一个序号(DBCS VC的另一个字符选项,一般是UTF16-LE)
Kuma8dao7 4B 00 75 00 6D 00 38 00 64 00 61 00 6F 00 37 00
飞鸟空 DE 98 1F 9E 7A 7A
4 UTF8
Kuma8dao7 4B 75 6D 61 38 64 61 6F 37
飞鸟空 E9 A3 9E E9 B8 9F E7 A9 BA
三、VC字符串(可能有误,是根据现象的推测)
VC主要是DBCS和MBCS两种,就是加L和不加L。
如果加L那么就把引号里的内容转化为宽字符,不加L就直接保存。
对于CEGUI所需要的UTF8,显然这两种方式都不合适,解决方法有两种:
1 UTF8和ASCII。英文是一致的,只要将中文变为3个字符即可。所以只需要改变当前的文件格式为UTF8,再输入中文时,自然就变成了3个字符的UTF8。
问题在于VC会认为此文件是ASCII的,运气好的话中文中没有ASCII的控制符才可。
2 维持当前格式不变(GB2312)。输入一个宽字符,转化为UTF8即可。