名词解释:
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.cppblog.com/sandy/archive/2006/06/21/8779.html)