提问人:S-N 提问时间:4/19/2023 更新时间:4/19/2023 访问量:266
如何在 MingW64 中输入 UTF-8 字符?
How input UTF-8 characters in MingW64?
问:
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,但结果仍然相同。
我还尝试添加 gcc 命令行参数 ,但仍然不起作用。(chcp 65001)
-finput-charset=UTF-8
但是当我将代码文件修改为GB系列的编码(如GB2312)或将CMD的页码修改为936时,它可以正常读取GB2312编码的数据,如下所示:
input: 你好
output: ce d2 b5 c4 00 00 00 00
这可以读取 Unicode 字符,但不能读取 UTF-8 编码。
答:
0赞
user18478866
4/19/2023
#1
试试 <wchar.h>?
#include <wchar.h>
int main()
{
static wchar_t text[32];
wscanf(L"%ls", text);
wprintf(L"%ls\n", text);
return 0;
}
评论
1赞
S-N
4/19/2023
这没关系,但不是 UTF-8.....
1赞
stark
4/19/2023
#2
在 bash shell 中,locale 设置为 LANG=en_US。UTF-8,这将正确读取 UTF-8 字符串。
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
char text[100];
scanf("%99s", text);
printf("%s\n", text);
for (int i=0; i < strlen(text); i++)
printf(" %02x",(unsigned char) text[i]);
printf("\n");
return 0;
}
快速的棕色狐狸
快速的棕色狐狸
e5 bf ab e9 80 9f e7 9a 84 e6 a3 95 e8 89 b2 e7 8b 90 e7 8b b8
评论