1. 采用 ansi 编码方式, 在 Ubuntu 下会出错, 另外通过 g++ -Wall -finput-charset=ISO-8859-1 test.cpp 方式可以指定输入文件格式, 但是这样很麻烦, 因为首先要知道文件的格式是什么, 在 Ubuntu 下 通过 file test.cpp 命令可以查到, 我把 ISO-8859-1 到 ISO-8859-16 都试了, 文件编码格式 ANSI(即 ISO8859-XX) 且文件中有 L"国家" 类似字符, 编译不会通过, 或者通过 - finput-charset=xxx 指定文件格式编译通过后输出也不对, 故太麻烦.
2. 在 Windows 下和 Ubuntu 下都通过的方式是文件编码采用 UTF-8.
3.printf 和 wprintf 不能混用, 即一个程序中使用了 printf, 就不使用 wprintf, 反之也是, 既然 printf 输出 char 和 wchar_t 字符都可以, 所以统一使用 printf 是最佳选择.
当然使用 printf 打印 wchar_t 时格式不一样, 是 %ls 或大写的 %S, 例如: printf("wide char: %ls\n", ws);
4. 一旦要打印中文字符, 在程序初始化时加一句 setlocale(LC_ALL, ""); 否则打印中文会出错.
5. Windows 对 字符串的内部编码比较统一, char 的编码都成 ANSI, 如 char s[] = "国家", s 里存的是 "国家" 的 ANSI 编码
wchar_t 的编码都成 UCS-2, 如 wchar_t ws[] = L"国家", s 里存的是 "国家" 的 UCS-2 编码
Ubuntu 对字符串的处理不是很统一, char 字符串的编码是随着文件编码格式有所变化, 如文件为 ansi, 则 Ubuntu 也为 ansi, 文件为 UTF-8, 则 char s[] = "国家" 里的也是 UTF-8 编码.
wchar_t 则默认采用 ucs-4 编码.
总结: 源代码文件编码用 UTF-8, 打印采用 printf 是跨平台 (操作系统, 编译器), 跨 char 和 wchar_t 的最佳解决方案之一, 另外不能忘了 setlocale(LC_ALL, "");
说的再多, 不如自己测试下, 如下为测试代码, 一共有 5 种 case, 每次注释掉其他 case, 留要测试的 case, 并按照 case 注释处更改文件编码方式便可, 更改编码方式采用 notepad++ 最方便了.
来源: http://www.bubuko.com/infodetail-3354536.html