我正在尝试读取 csv 文件并打印它。我得到了我想做的,但我不确定如何打印韩文字符

问题描述 投票:0回答:1

我有一个包含韩语字符的 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 但这导致了错误,我觉得我被卡住了。

我知道在英文网站上问这样的问题不是最好的,但我真的只是希望如果有人知道的话

c csv parsing cjk
1个回答
1
投票

你的代码没有问题。是 Windows 搞砸了。 (它在 Linux 和 Mac 上运行良好。)执行此操作以解决 Windows 的问题:

在 Windows 设置中启用新的 UTF-8 选项。转到语言 设置,单击管理语言设置,然后单击更改系统 locale... 并勾选 Beta: Use Unicode UTF-8 for worldwide language 支持选项。重新启动计算机。

然后语言将在终端中正确显示。

是的,字节数可以多于字符数。它们存储为 UTF-8,它将每个字符编码为一到四个字节。您的每个韩文字符都是三个字节(不是两个字节)。然而,逗号仍然是逗号,不能出现在另一个字符代码中,所以你正确地找到了你的名字字符串的结尾。

© www.soinside.com 2019 - 2024. All rights reserved.