我正在将Microsoft Windows 10与mingw-w64(gcc版本8.1.0,x86_64-posix-sjlj-rev0,由MinGW-W64项目构建)一起使用cmd
。当我尝试打印或存储然后在Windows控制台上打印西班牙语字符时,它显示错误。例如,我尝试执行此程序:
#include <stdio.h>
int main(void) {
char c[20];
printf("pía\n");
scanf("%s", c);
printf("%s", c);
}
如果我引入一些西班牙语字符,则返回的语句可以,但是开头打印的语句显示错误:
pía
laíóñaú
laíóñaú
一些解决方案建议放置setlocale()
函数,但结果相同。其他解决方案是将UTF-8 Unicode兼容性放在区域设置上:
但是现在错误正好相反,打印出来的错误就可以了,但是当我引入一个奇怪的字符时,控制台不会显示它:
pía
lía
l
因为我看到的所有解决方案都是通过上述设置或通过设置解决的,所以这有点令人沮丧setlocale()
,但是它们都不适合我,我也不知道为什么。
正如Mofi在评论中所说,我尝试使用SetConsoleCP()
并SetConsoleOutputCP()
更改控制台的代码页。在没有完全理解这些功能如何工作的情况下,使用与上面相同的代码,我运行了一些错误结果的示例:
pía | p├¡a | p├¡a | pía
lía | lía | lía | lía
l | l | lía | la
input: 65001 output 65001 | input: 65001 output 850 | input: 850 output 850 | input: 850 output 65001
我如何不完全了解此功能,我不知道为什么在上一个示例中,控制台没有显示带重音符号的存储字符,但是在打印的字符中却显示了该字符,而在上面的示例中,情况却相反。
正如Mofi在上述评论中所说,解决方案在于我使用的编辑器如何解释我所写的字符。我使用的是Visual Studio Code,并更改了默认情况下的编码,在右下角更改UTF-8
为CP 850
。现在,编辑者将能够正确解释西班牙语字符。
下一个问题是更改控制台的代码页。使用命令chcp 850
或功能SetConsoleCP(850)
,SetConsoleOutputCP(850)
我们可以在打开的每个控制台上更改代码页。要默认设置,请执行以下操作:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
。New
->String Value
并输入名称Autorun
。chcp 850 > nul
。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句