由于Windows上面的编码问题比较多,源代码尽量使用UTF8编码(这也是Java或者Web的选择,采用GBK编码会导致乱码问题).
但是当在控制台输出中文时就碰到了问题,由于Windows的控制台根据系统非UNICODE编码及位置的设置,控制台在输出中文时默认是GBK编码,
也就是在控制台输出UTF8字符会变成乱码,那么我们采用宽字符输出,这样就避免了控制台字符集的问题.
控制台宽字符显示有个必要的条件:控制台的字体应当支持宽字符.
将控制台的代码页修改为
437(OEM-United States)
默认的Lucida Console字体支持宽字符.
然后使用_setmode来设置标准输出为_O_U16TEXT即可.示例如下:
#include <fcntl.h> #include <io.h> #include <stdio.h> int main(void) { _setmode(_fileno(stdout), _O_U16TEXT); wprintf(L"天朝文测试"); return 0; }
来源:http://stackoverflow.com/questions/2492077/output-unicode-strings-in-windows-console-app
详细信息见:http://blogs.msdn.com/b/michkap/archive/2008/03/18/8306597.aspx?Redirected=true
关于Windows控制台UTF8流支持的问题:
http://alfps.wordpress.com/2011/11/22/unicode-part-1-windows-console-io-approaches/
http://alfps.wordpress.com/2011/12/08/unicode-part-2-utf-8-stream-mode/