控制台程序的中文输出乱码问题,printf,wprintf与setlocale
复制代码
#include <stdio.h>
#include <wchar.h>
int main(void) {
char str[] = “中文”;
wchar_t wstr[] = L"中文";
printf(“1:%s\n”, str);
wprintf(L"2:%s\n", wstr);
return 0;
}
复制代码
Windows平台下VS2008输出:
Windows平台下MinGW输出:
当加上setlocale函数设定后,
复制代码
#include <stdio.h>
#include <locale.h>
#include <wchar.h>
int main(void) {
setlocale(LC_CTYPE, “”);
char str[] = “中文”;
wchar_t wstr[] = L"中文";
printf(“1:%s\n”, str);
wprintf(L"2:%s\n", wstr);
return 0;
}
复制代码
输出分别为:
为解其中各种纷乱的纠结,又让我一个美好的下午就此悲剧= =.
=============================================================分割线
这档子事还得从字符编码说起.关于字符集和编码的基础知识,请看咱昨天写的 字符集相关知识的简单总结.
这里涉及到一个字符在源代码(文本)中,编译好的二进制文件中,以及最后控制台输出编码形式的区别.
首先,要明确一点:C(语言/程序)并不理解ANSI,UTF-8以及任何其他编码.它只知道处理你给它的字符的二进制表示.
在简体中文Windows下,默认的文本保存编码是ANSI(即GBK