Raf*_*dez 5 c windows winapi cmd windows-console
我正在使用带有 mingw-w64(gcc 版本 8.1.0,x86_64-posix-sjlj-rev0,由 MinGW-W64 项目构建)的 Microsoft Windows 10 和cmd. 当我尝试在 Windows 控制台上打印或存储然后打印西班牙语字符时,它显示错误。例如我试图执行这个程序:
#include <stdio.h>
int main(void) {
char c[20];
printf("pía\n");
scanf("%s", c);
printf("%s", c);
}
Run Code Online (Sandbox Code Playgroud)
如果我引入一些西班牙语字符,返回的句子是可以的,但开头的打印句显示错误:
p?¡a
laíóñaú
laíóñaú
Run Code Online (Sandbox Code Playgroud)
一些解决方案建议放置setlocale()函数,但结果是相同的。其他解决方案是将 UTF-8 unicode 兼容性放在区域设置上:
但是现在错误相反,打印出来的没问题,但是当我引入一个奇怪的字符时,控制台没有显示它:
pía
lía
l
Run Code Online (Sandbox Code Playgroud)
有点令人沮丧,因为我看到的所有解决方案都是通过上述或设置解决的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
Run Code Online (Sandbox Code Playgroud)
我怎么不完全理解这个函数我不知道为什么在最后一个例子中,控制台不显示重音存储的字符,但在打印的字符中它显示了,而在上面的例子中,情况正好相反。
正如莫菲在上面的评论中所说,解决方案在于我使用的编辑器如何解释我写的字符。我正在使用 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.| 归档时间: |
|
| 查看次数: |
249 次 |
| 最近记录: |