关于Visual C++ 2008中wprintf和wprintf_s输出中文乱码问题
来源:互联网 发布:淘宝我的仓库在哪里 编辑:程序博客网 时间:2024/05/21 02:52
最近写编码转换库,发现MB编码转换成 Unicode 后,中文总是乱码。
起初以为是自己写错了,但测试后发现转换结果是完全正确的。
再测试一下,发现居然连常字符串都不能正常输出……
CharWucs2s[] =L"我fsf我safas";
wprintf(L"%s\r\n",ucs2s);
输出结果:?fsf?safas
带着疑问打开MSDN,发现原来 printf 函数有N个版本……
其中 Unicode 版本的如下
intwprintf_s(const wchar_t *format [,argument]... );
int_wprintf_s_l(const wchar_t *format, locale_tlocale [,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 等字符串操作函数都有影响。。。
setlocale的具体用法参照:http://blog.csdn.net/whatday/article/details/9734781
setlocale的具体用法参照:http://blog.csdn.net/whatday/article/details/9734781
- 关于Visual C++ 2008中wprintf和wprintf_s输出中文乱码问题
- 关于Visual C++ 2008中wprintf和wprintf_s输出中文乱码问题
- VS2010中wmain入口函数中使用wprintf输出中文乱码问题
- wprintf 输出中文的问题
- wprintf_s中文乱码解决方法
- 关于cout,wcout输出的测试,以及printf,wprintf 输出中文,内存中直接输出图像给网页问题
- 关于cout,wcout输出的测试,以及printf,wprintf 输出中文,内存中直接输出图像给网页问题
- ReadFile,WriteFile,wprintf 中文乱码问题
- iostream、printf/wprintf和中文输出
- iostream、printf/wprintf和中文输出
- iostream、printf/wprintf和中文输出
- iostream、printf/wprintf和中文输出
- iostream、printf/wprintf和中文输出
- 控制台程序的中文输出乱码问题,printf,wprintf与setlocale
- 控制台程序的中文输出乱码问题,printf,wprintf与setlocale
- wprintf输出中文
- wprintf输出中文
- 使用wprintf输出中文
- hadoop命令(仅供自己查看使用)
- HDU1863 畅通工程 解题报告--prim
- linux挂载新硬盘,开机自动挂载
- PhantomReference的个人理解
- 根据前序和后序构建二叉树
- 关于Visual C++ 2008中wprintf和wprintf_s输出中文乱码问题
- HDU1102 Constructing Roads 解题报告--prim
- hdu 4640 多校第四场 状态压缩+最短路+dp
- Win32 API之Setlocale函数配置地域化信息函数
- C语言内存管理(数组,指针)
- 参加工作的第一个月
- volatile
- C语言无名管道实现父子进程间通信
- HDU1879 继续畅通工程 解题报告--prim