c语言汉字乱码
这种情况多数是由于操作系统的语言选项不正确引起的。建议你查看一下控制面板中的区域和语言选项,特别是有关“非Unicode程序的语言”,一定要选择成“中文(简体,中国)”。然后重启电脑。
⑵ C语言控制台程序,中文输出变成乱码,怎么解决
这里涉及到一个字符在源代码(文本)中,编译好的二进制文件中,以及最后控制台输出编码形式的区别.
首先,要明确一点:C(语言/程序)并不理解ANSI,UTF-8以及任何其他编码.它只知道处理你给它的字符的二进制表示.
在简体中文Windows下,默认的文本保存编码是ANSI(即GBK);Linux下根据系统locale设定,一般应该是(zh_CN.UTF-8).(以下基于简体中文Windows)
1)对于源文件中保存的"中文"这个字符串,VS2008看到的就是"0xd6d0"和"0xcec4"的形式(默认ANSI编码得到).但编译器才不管是不是GBK神马的,它就管那串数字.
区别,MinGW看到的是"0xe4b8ad"和"0xe69687"(gcc默认UTF-8).注意,用MinGW编译的源文件中有中文宽字符必须保存为UTF-8编码.
2)然后,在二进制文件中的存储形式,对传统的字符串(char str[] = "中文";),编译器什么都不做,直接把那串数字(如"0xd6d0","0xcec4")搬过去塞进二进制文件.
但对于宽字符串(wchar_t wstr[] = L"中文";),编译器会将其做转换,转换成Unicode编码格式(在Windows是UTF-16,而Linux下是UTF-32).如"中文"的16位Unicode是"0x4e2d"和"0x6587",然后把这串转换后的数字("0x4e2d","0x6587")塞进二进制文件中.(这里VS和MinGW做的没有区别)
这里有点需要注意,编译器必须知道你的源文件保存的编码!如VS默认是ANSI编码,如果你用UTF-8保存.c源文件去用VS打开看一定是乱码.同理如果你用mingw编译ANSI编码保存的源文件,也会出错!(但可以修改编译选项解决,见文章末尾) 在本文这里这个原因其实很好理解,因为编译器需要知道,如果它要将一个保存在文件中的字符转成宽字符时,是从什么编码转到Unicode.(可见上述VS是GBK->Unicode,而MinGW是UTF-8->Unicode)
⑶ C语言运行的时候汉字全部乱码怎么回事
1、汉字乱码是因为缓冲区有字符,需要用fflush(stdin);来清空键盘缓冲区,
使用getch等都是治标不治本的办法,可以多学习一下fflush的使用,对于大批量的手动输入,很用。
2、例程:
#include"stdio.h"
#include"stdlib.h"
#include<conio.h>
main()
{
charx;
while(1)
{
printf("请输入一个小写字母:");
fflush(stdin);//清空键盘缓冲区
x=getchar();
printf("大写字母为: ");putchar(x-32);
}
}
⑷ 为什么我的ubuntu11.04在编译的C语言中,汉字部分printf输出后显示乱码
很可能是你的源码存放的文件的编码格式有问题.
可以尝试用vim打开以埋皮手弯嫌后输入
:se fileencoding=utf-8
再握姿编译调试看看.
⑸ C语言输出中文乱码
提几个建议。1)没给出str的大小,不知道你定义的多大。至少str要保证120以上。考虑用2的倍数最优可以char
str[122]并且因为系统将自动在最后加'\0'。最好设定读取121为好。以免读取半个中文字。2)fgets的用法问题。
追加返回值的判断为好。if(fgets(str,120,fp)!=null){
printf("%s\n",str);}3)关于出现乱码的问题,估计你的文件中有中文汉字。读取到119位的时候正好是某个汉字的前一半。要解决这个if(fgets(str,121,fp)!=null)
这里120
改成读偶数个121。另外文件最好用宽字符的。就可以避免乱码了。
⑹ C语言编程出现汉字输出乱码现象
C语言中一个汉字是由两个字节来表示的
而C语言编程主要是以字节为单位来显示
所以你的C语言输出中,如果汉字显示只显示了一个字节,就会有乱码出现了
正常的做法是,你的printf输出时,符号的长度要为偶数字节。