![](https://csdnimg.cn/release/download_crawler_static/86389268/bg1.jpg)
Code:Blocks 中文乱码问题原因分析和解决方法!
2011-01-07 00:20 6150 人阅读 评论(15) 收藏 举报
编译器 encodingwindowsgcccharacterjava
这里以 Code::Blocks 10.5 版本为蓝本进行说明。
首先,请在 Code::Blocks 里面输入标准的一个 C 程序:
[cpp] view plaincopy
1. #include<stdio.h>
2. #include<stdlib.h>
3. #include<wchar.h>
4. #include<string.h>
5. #include<locale.h>
6. int main(void)
7. {
8.
9. char str[]="中国 china";
10. wchar_t str_w[]=L"中国 china";
11.
12. int len=(int)strlen(str);
13. int len_w=(int)wcslen(str_w);
14. printf("%s,size=%d/n",str,len);
15.
16. setlocale(LC_ALL, "chs");
17. wprintf(L"%s,size=%d/n",str_w,len_w);
18.
19. system("pause");
20. return 0;
21. }
然后选用不同的编译器,观看效果。
1.Tiny C
编译没问题,但是 wprintf 是显示不出内容的。注释掉 setlocale(LC_ALL,"chs“)之后,
wprintf 显示出和 printf 一样的效果。
结果证明,Tinny C 是不真正的支持 wchar_t 宽字符集。因为通过调试器,我发现他的 wchar_t
里面保存的字符每个字符确实是用 2 个字节了,但是里面编码依然是 ANSI 编码,并不是
unicode 代码,所以 setlocale(LC_ALL,"chs“)+wprintf 显示不出来(其实 wprintf 实现的时候,
是不会直接输出 unicode 的,他实际是先把 unicode 转成多字节的 ANSI 编码,然后再输出,