Windows 控制台(console)输出宽字符(解决中文输出乱码问题)

由于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/

 

posted @ 2013-05-19 22:05  liff.engineer  阅读(1388)  评论(0编辑  收藏  举报