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


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

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


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


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

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


#include <stdio.h>
#include <wchar.h>
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 <stdio.h>
#include <wchar.h>
#include <locale.h>
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()转换....

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值