Platform: Windows x64 22H2
我有以下代码(文件编码格式:UTF-8):
#include <stdio.h>
int main(int argc, char **argv)
{
static char text[8];
scanf("%[^\n]s", text);
printf("%s\n", text);
return 0;
}
当只输入ASCII表中的字符时,它可以正常工作。
但当输入中文或其他Unicode编码等字符时,它不会读取。
如果输入Unicode字符,则文本数组的内容为:00 00 00 00 00 00 00 00
。我在Windows CMD
中执行了这个程序,编译指令是:gcc main.c -o main.exe
。
我正在尝试添加本地支持,这是修改后的代码:
#include <stdio.h>
#include <locale.h>
int main(int argc, char **argv)
{
setlocale(LC_ALL, "zh_CN.UTF-8");
static char text[8];
scanf("%[^\n]s", text);
printf("%s\n", text);
return 0;
}
但是这个数组的内容仍然是:00 00 00 00 00 00 00 00
。
我尝试将CMD的页码再次修改为65001 (chcp 65001)
,但结果还是一样。我也尝试添加gcc命令行参数-finput-charset=UTF-8
,但仍然不起作用。
但是当我把代码文件修改为GB系列的编码(如GB2312)或者把CMD的页码改为936时,它就可以正常读取GB2312编码的数据,如下图所示:
input: 你好
output: ce d2 b5 c4 00 00 00 00
它可以读取Unicode字符,但不能读取UTF-8编码。
2条答案
按热度按时间1bqhqjot1#
尝试<wchar.h>?
v8wbuo2f2#
在locale设置为LANG=en_US.UTF-8的bash shell中,它可以正确读取UTF-8字符串。