ZKX's LAB

c语言中读取及输出汉字的问题 c语言编程输出汉字编码

2021-04-06知识10

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做的没有区别)这里有点需要注意,编译器必须知道你的。

请问在C语言中如何输出汉字? 根据你的代码,改复成制下面的可以正常输2113出:includeincludeincludeint main(){char*p=\"你好,中国!5261;for(size_t i=0;i(p);i+)if(p[i]){printf(\"%c%c\",p[i],p[i+1]);不要用p[+i],因为printf是先计算右4102边表达式的1653值的,按照你原来的代码,假设是第一次循环,那是会输出2个同样的p[1]的,而不是p[0]和p[1]i+;}return 0;}

c语言编程:输出ASCII码对应的字符 有些事情,自己多想想就会了。这里是我写的代码:includeint main(){printf_s(\"请输入一个ANCII码值(32-127):\");int n=0;scanf_s(\"%d\",&n);if(n>;=32&n)printf_s(\"ANCII码值为%d 的字符是%c.\\n\\n\",n,n);elseprintf_s(\"这个ANCII码值不对(必须在32-127之间):%d\\n\\n\",n);system(\"PAUSE\");return 0;}如果编译不了,这里有我编译好的源程序

#c语言编程输出汉字编码

随机阅读

qrcode
访问手机版