小编Raf*_*dez的帖子

在 cmd 中打印和存储西班牙语字符(á、é、í、ñ...)

我正在使用带有 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: …
Run Code Online (Sandbox Code Playgroud)

c windows winapi cmd windows-console

5
推荐指数
1
解决办法
249
查看次数

标签 统计

c ×1

cmd ×1

winapi ×1

windows ×1

windows-console ×1