其实,我在UNICODE环境下进行开发已经很久了,原来也对UNICODE的一些操作非常多。但是,今天同事突然想在控制台程序中输出几个UNICODE汉字,是根据这些汉字的UNICODE码来输出。开始他试图用printf来输出,这样肯定不行。我就让他利用 wprintf来输出看看可以吧。结果好像用 wprintf也不行。
这让我很郁闷的,这么简单的问题我以前难道没有注意吗。于是想了想,好像我以前自己做了一套各种字符集之间转码的程序,一般中文的话,我都转成GB码在输出,好像是没有接触到这个问题。
没办法,只有虚心的再google了。发现,其实在控制台下,系统默认的local 字符集是GB码的(指安装中文操作系统的)。而在我们使用UNICODE的东西时候,是系统帮助我们进行宽字符转到多字节字符的。
所以,如果想让控制台程序下直接显示UNICODE的汉字,必须对控制台的编码进行一些local设置。代码如下,
#include <locale.h>
setlocale(LC_ALL, "chs");
wchar_t ch = 0x4e2d;
wprintf(L"%c\n",ch);
// _tprintf(_T("%c"),ch);
这个还有一个好处,就是,这种设置的方法不会影响本来用printf输出的多字符集的汉字输出。
评论