诶.. 这个东西真折腾人那...
鄙人的xp系统的locale(控制数字货币等格式)一直设的是e文, codepage(控制默认ansi编码)也几乎一直用的e文. 所以碰到中文及其它非unicode的软件总是会有乱码的.
今天摆弄cygwin, 记得以前可以让它显示中文的, 按照之前的方法, 怎么都不行, 最后还是要改codepage =.=b... 那..难道xp自己的dir命令难道也不支持中文么? 试了一下, 果然出来的都是"?"号.. 呵.. 我居然用了那么多年才发现.
然后又用号称支持多语言的bitcomet测了一下, unicode版显示完全正常, 而ansi(9x)版, 中文显示也是乱码! 额呵.. 作者大概以为不会有人选了e文的codepage语言还选中文的吧-.-... 然后写了段最简单代码, 分别保存成unicode和utf-8测了一下(ansi版的话英文是e文codepage, 保存的时候直接就乱码了:( ):
#include <stdio.h>
#include <windows.h>
int main(int argc, char *argv[])
{
wchar_t* string = L"你好!";
printf("%02x%02x%02x\n", string[0], string[1], string[2]);
MessageBoxW(0, string, L"a", 0);
return 0;
}
// ---------------------------------------------------------------------------
unicode版能正确显示中文, 以下是输出:
4f60597dff01
utf-8版则不能正确显示, 输出:
e4bda0
// ---------------------------------------------------------------------------
这说明一个问题就是.. string都是以byte形式保存的, 看到string就把它当作一串当前encoding的byte.
所以, 我们写代码的时候, 最好的做法就是全部用ascii码的那些字符, 因为无论什么encoding都一样. 如果要多语言的话就用配置文件, 并用utf-8编码, 这也是java的做法.



