在C语言中使用wchar_t等宽字符显示中文测试


在C语言中使用wchar_t等宽字符显示中文测试

在长期的C语言编程中,我从未意识到使用中文带来的不便,因为只要调用默认的printf语句即可,如:
#include 
int main(int argc, char *argv[])
{
    fprintf(stdout, "中文测试\n");
}


在VC6.0中和gcc上编译能通过测试,(VC6.0使用GBK编码,gcc用到了utf8编码)


今天,重新翻开了C语言中书,说到有C99标准支持了“扩展字符集”(UCN机制),其中有说到wchar_t类型支持宽字节的处理(utf8)。

我想,对于中文的处理应不在话下,于是开使测试:


#include 
#include 
int main(int argc, char *argv[])
{
    wchar_t out[4] = L'中文数组';
    fprintf(stdout, "%ls\n", out);

}



高高兴兴编译后,测试,得到结果却是什么都没有,我想问题出在哪呢?首先查看fprintf的返回值看看

int result = fprintf(stdout, "%ls\n", out);
fprintf(stdout, "result: %d", result);
//得到的值是负1


再次查看yelp文档,发现其测试用例只是用到了一些ASCII码字符:

wchar_t *out = L"@@@@";
看来,要通过yelp查找中文的输出帮肋是没有办法的了,到网上找找答案,终于找到了一个解决方案:


#include 
#include 
#include 
int main(int argc, char *argv[])
{
    if(setlocale(LC_CTYPE, "") != NULL)
    { /*设置为本地环境变量定义的locale*/
        fprintf(stderr, "can't set the locale\n");
    }
    wchar_t out[4] = L'中文数组';
    fprintf(stdout, "%ls\n", out);
}

得到正确的结果。

先前有看到locale的设置,但是就是没和这个wchar_t关系到,看来,我得要重新翻翻书了


在 程序开始时加上:

if(setlocale(LC_CTYPE, "") == NULL)   /*设置为本地环境变量定义的locale*/

    return 0;


注意了...string 或者 wstring 需要 调用 c_str()转换....

就能正确显示中文了...

你可能感兴趣的:(在C语言中使用wchar_t等宽字符显示中文测试)