名詞解釋:
i18n :
internationalization 國際化
L10N : localization 本地化
g11n: globalization 全球化 = i18n + L10n
1. Notepad的把戲
Notepad為了識別/記錄不同編碼的文件,會加幾個特定的字節在文件頭。
ANSI : 沒有
UTF-8: EF BB BF
UTF-16:FF FE
UTF-16 Big endian : FE FF
for example: 文字內容為"測試1234",各種編碼的文件格式為
ANSI:? B2 E2 CA D4 31 32 33 34
UTF-8:
EF BB BF E6 B5 8B E8 AF 95 31 32 33 34
UTF-16:
FF FE 4B 6D D5 8B 31 00 32 00 33 00 34 00
UTF-16 Big endian :
FE FF 6D 4B 8B D5 00 31 00 32 00 33 00 34
2. wprintf
Q : sizeof(wchar_t) = ?
A : 隨編譯器不同。(所以:在需要跨平臺的時候盡量不用wchar_t) vc : sizeof(wchar_t) = 2;
Q: 在vc中,為什么直接使用wprintf(L"測試1234")會沒有結果
A: 沒有設置好locale,這樣做
setlocale(LC_ALL?,"chs");
wprintf(L"%s",L"測試1234");
或者(假設當前活動codepage為chs)
char?scp[16];
int?cp?=?GetACP();
sprintf(scp,".%d",cp);
setlocale(?LC_ALL,?scp?);
wprintf(L"測試1234");
3 . wcout
一樣,不過設定locale,請用std::locale
????locale?loc("chs");
????wcout.imbue(loc);
????wcout?<<?L"測試1234"?<<?endl;
(關于wprintf 請參考: http://www.shnenglu.com/sandy/archive/2006/06/21/8779.html)
?