我有一个包含韩语字符的 csv 文件。但我不确定如何在我的代码中打印韩语。
csv 文件如下所示:
name,hp,damage
대학오리,20,5
대학냥이,30,10
시계탑기린,100,20
我的代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char name[1000];
int hp;
int damage;
} Monster;
typedef struct {
char header1[sizeof "name"];
char header2[sizeof "hp"];
char header3[sizeof "damage"];
} Header;
int main()
{
FILE* fp = fopen("entityData.csv", "r");
if (!fp) {
printf("Error opening file\n");
return 1;
}
Monster monsters[100];
int num_records = 0;
char line[100];
Header header;
fgets(line, sizeof line, fp);
strncpy(header.header1, strtok(line, ","), sizeof header.header1);
strncpy(header.header2, strtok(NULL, ","), sizeof header.header2);
strncpy(header.header3, strtok(NULL, "\n"), sizeof header.header3);
while (fgets(line, sizeof(line), fp))
{
char* token = strtok(line, ","); //, 기준으로 나눠서 token에 저장
strncpy(monsters[num_records].name, token, 20);
token = strtok(NULL, ",");
monsters[num_records].hp = atoi(token);
token = strtok(NULL, ",");
monsters[num_records].damage = atoi(token);
num_records++;
}
for (int i = 0; i < num_records; i++)
{
printf("%s:%s %s:%d %s:%d\n",
header.header1, monsters[i].name,
header.header2, monsters[i].hp,
header.header3, monsters[i].damage);
}
fclose(fp);
return 0;
}
我写的程序读取上面的csv文件,应该这样打印:
name:대학오리 hp:20 damage:5
name:대학냥이 hp:30 damage:10
name:시계탑기린 hp:100 damage:20
取而代之的是名称部分被破坏了。
找了一圈才知道韩文字母一个字母占2个字节,不匹配char类型。我试过使用 wchar 但这导致了错误,我觉得我被卡住了。
我知道在英文网站上问这样的问题不是最好的,但我真的只是希望如果有人知道的话
你的代码没有问题。是 Windows 搞砸了。 (它在 Linux 和 Mac 上运行良好。)执行此操作以解决 Windows 的问题:
在 Windows 设置中启用新的 UTF-8 选项。转到语言 设置,单击管理语言设置,然后单击更改系统 locale... 并勾选 Beta: Use Unicode UTF-8 for worldwide language 支持选项。重新启动计算机。
然后语言将在终端中正确显示。
是的,字节数可以多于字符数。它们存储为 UTF-8,它将每个字符编码为一到四个字节。您的每个韩文字符都是三个字节(不是两个字节)。然而,逗号仍然是逗号,不能出现在另一个字符代码中,所以你正确地找到了你的名字字符串的结尾。