我的控制台窗口使用的是 437
编码页,我已经在控制台窗口中输出了俄文字母:
echo привет
我得到了正确的俄语输出,即:
привет
但是为什么我能得到正确的俄语输出,难道不应该得到6个问号作为输出("??????")?我认为应该得到"??????"作为输出的原因是,在将字符串"echo привет"发送到标准输入缓冲区之前,它应该被转换成
437
代码页(这将产生"??????",因为那些俄文字母不存在于437
代码页中),然后转换后的字符串将被发送到标准输入缓冲区,然后"??????"字符串将被cmd.exe从标准输入缓冲区检索出来,并且cmd.exe将打印它到控制台窗口。我知道这是会发生的,因为我创建了一个C程序,将其与控制台窗口关联并设置其代码页为
437
,然后我会向程序发送"привет"俄文字母,然后程序将其打印到控制台窗口中(所打印的是"??????"字符串),这是我的程序代码:#include <Windows.h>
#include <stdio.h>
int main()
{
SetConsoleOutputCP(437);
SetConsoleCP(437);
char str[1212];
gets(str);
printf(str);
return 0;
}
我正在使用经典控制台窗口(而非PowerShell),并且正在使用Windows 10。