前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >wprintf_s中文乱码解决方法

wprintf_s中文乱码解决方法

作者头像
用户7886150
修改2021-02-19 10:04:57
8730
修改2021-02-19 10:04:57
举报
文章被收录于专栏:bit哲学院

参考链接: C++ swprintf()

转载自:http://fenying.blog.163.com/blog/static/10205599320106311563319/ 

  最近写编码转换库,发现MB编码转换成 Unicode 后,中文总是乱码。

 起初以为是自己写错了,但测试后发现转换结果是完全正确的。

 再测试一下,发现居然连常字符串都不能正常输出……

  CharW 

  ucs2s[] = 

  L"我fsf我safas";

  wprintf(

  L"%s\r\n", 

  ucs2s);

 输出结果:?fsf?safas

 带着疑问打开MSDN,发现原来 

 printf 函数有N个版本……

 其中 Unicode 版本的如下

 int 

 wprintf_s( 

 const wchar_t *format [, argument]... );

 int 

 _wprintf_s_l( 

 const wchar_t *format,

  locale_t 

 locale [, argument]... );

 这两个函数有什么区别呢?locale_t 

 locale?

 不错,问题就在这里了。原来这个参数描述的是“本地语言”,也就是程序本地化的意思。输出前通常要通过这个参数设置输出文字的语言区域,例如中文。

 说简单点,也就是微软为了实现本地化而加入的改动。

 解决方法如下:

 1、加入头文件 

 #include 

 <Locale.h>

 2、调用函数 

 _wsetlocale 或 

 setlocale 设置要使用的本地语言。如:

 _wsetlocale(LC_ALL, L"chs");

 或者

 setlocale(LC_ALL, "chs");

 此外,网上说 

 locale 对 

 prinft 和 

 printf_s 没有影响,这个似乎是如此。

 但我在MSDN里看到的几乎对所有的 

 printf、

 atoi、

 atof 等字符串操作函数都有影响。。。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档