這兩天又被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即可。