在C语言中使用西里尔字母“无法将某些unicode字符保存在当前代码页中”

时间:2019-01-04 17:44:50

标签: c windows

我正在努力使用Cyrillic使程序中的文本以保加利亚语显示。

我已经尝试过10/10/2018 20:00 11/19/2018 14:15 12/10/2018 18:51 10/29/2018 7:30 10/7/2018 14:30 1/2/2019 0:01 'SetConsoleOutputCP(1251)',但是他们都不起作用。我正在使用VS2018,文件已另存为'SetConsoleCP(1251)'。尝试编译警告时:

file.c

代码

"Some unicode characters can't be saved in the current codepage."

1 个答案:

答案 0 :(得分:1)

如果系统设置为使用1251以外的ANSI代码页,并且将文件保存在其他代码页或Unicode(UTF8或UTF16)中,则编译器将无法识别西里尔字符。

因此,您必须将* .c文件保存在代码页1251中,如下图所示。

enter image description here

更好的解决方案是将文件保存为Unicode(首选UTF8),然后在整个程序中使用宽字符串函数。但是,_setmode是特定于Visual Studio的。您不能使用printf并呼叫_setmode(_fileno(stdin), _O_U16TEXT);

#include <stdio.h>
#include <Windows.h>
#include <io.h> 
#include <fcntl.h>

int main(void)
{
    _setmode(_fileno(stdout), _O_U16TEXT);
    _setmode(_fileno(stdin), _O_U16TEXT);
    wprintf(L"1.четене от файл и запис + English\n");
    return 0;
}