c语言printf输出中文乱码 c语言输出乱码怎么解决?
c语言输出乱码怎么解决?
1. 如果字符串数组中的每个字符都分配了一个值,请在每个字符串的最后一个字符后添加“0”,以指示字符串的结尾,输入时不会出现不必要的乱码,因为gets()或scanf()的%s会在字符串结尾后主动添加“0”。
C语言控制台程序,中文输出变成乱码,怎么解决?
这涉及到源代码(文本)、编译的二进制文件和最终控制台输出编码形式中字符的差异。
首先,请明确C(语言/程序)不理解ANSI、UTF-8和任何其他编码。它只知道如何在简体中文窗口中处理您,默认的文本保存代码是ANSI(GBK)。在Linux中,根据系统区域设置,它应该是(zh)中国联合技术论坛-8) (以下基于简体中文窗口)
1)对于源文件中保存的字符串“Chinese”,VS2008将看到“0xd6d0”和“0xcec4”(默认ANSI编码)的形式。但是,编译器并不关心它是否是GBK Shenma,它关心的是数字字符串。区别在于MinGW看到“0xe4b8ad”和“0xe69687”(GCC默认UTF-8)。注意,用MinGW编译的源代码文件中有全中文字符,必须保存为UTF-8编码。
2)然后,在二进制文件存储形式中,对于传统字符串(char STR[]=“Chinese”),编译器不做任何操作,直接移动数字字符串(如“0xd6d0”,但是对于宽字符串(wchar)ut wstr[]=例如,“Chinese”的16位Unicode是“0x4e2d”和“0x6587”,然后转换的数字(“0x4e2d”,“0x6587”)被放入二进制文件。(这里的vs和MinGW没有区别)
]这里,需要注意的是,编译器必须知道,例如,vs在默认情况下是ANSI代码。如果使用UTF-8保存。用VS打开的C源文件,必须是乱码。同样,如果使用MinGW编译用ANSI代码保存的源文件,也会出现错误!(但您可以修改编译选项,请参阅本文结尾)在本文中,这个原因非常容易理解,因为编译器需要知道将保存在文件中的字符转换为宽字符时使用的编码。(可以看出,上面的vs是GBK->unicode,MinGW是UTF-8->unicode。)
c语言printf输出中文乱码 c语言中文显示乱码 为什么c语言输出中文乱码
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。