如何使用 C 将 utf-8 字符写入 csv 文件?

How can I write utf-8 characters to a csv file with C?

提问人:muratkavak 提问时间:11/5/2023 最后编辑:chqrliemuratkavak 更新时间:11/5/2023 访问量:102

问:

如何在 C 中将 UTF-8 字符写入 CSV 文件?我想写诸如 或 之类的字母。我也不能写在不同的列中。我猜我的电脑有问题:即使使用如此简单的代码,它也会将所有数据写入单个单元格:ŞĞİ

#include <stdio.h>

int main() {
    FILE *file = fopen("veriler.csv", "w");

    if (file == NULL) {
        printf("Dosya açma hatası!\n");
        return 1;
    }

    // CSV dosyasına verileri yazma
    fprintf(file, "Ad, Soyad, Yaş\n");
    fprintf(file, "John, Doe, 30\n");
    fprintf(file, "Jane, Smith, 25\n");

    fclose(file);
    printf("CSV dosyası oluşturuldu.\n");

    return 0;
}
c excel csv utf-8 printf

评论

0赞 pmg 11/5/2023
也许您的 CSV 阅读器将分号视为分隔符???fprintf(file, "Ad; Soyad; Yaş\n");
0赞 muratkavak 11/5/2023
ı 喜欢这个网站 <3 :D成功了。你知道如何写 utf-8 字符,例如“Ş”吗?
0赞 pmg 11/5/2023
嗯......它应该只需简单地以 UTF-8 编写源文件(不是 ANSI,不是 ISO-8859-1,不是其他任何东西)即可工作。或者写 unicode 点编码的 xDfprintf(file, "==> \xc5\x9e <==")
0赞 muratkavak 11/5/2023
tbh ı 没有得到解决方案。有一个包含 UTF-8 字符的 JSON 文件。ı 已经从中读取它们。现在,我必须将它们打印成 CSV 文件作为 UTF-8。这是我的大学作业OOP课程。你能给我举个例子吗?
0赞 pmg 11/5/2023
应该在不做任何特别事情的情况下工作...... (或其他什么)然后(或其他什么)应该保持相同的编码fgets(...)fputs(...)

答:

1赞 chqrlie 11/5/2023 #1

您的问题中有 2 个单独的问题:

  • CSV 文件格式有许多变体:列分隔符可以是逗号分隔值所暗示的名称,也可以是各个国家/地区常用的格式。将 CSV 文件导入其他工具(如 Excel)时,应检查它们用于列分隔符的约定。,;

  • 用于表示非 ASCII 字符(如 )的字符编码,或者必须在环境中涉及的各种工具中保持一致:源代码编辑器、编译器、从中读取数据的文件(JSON 强制使用 UTF-8)、操作系统配置(特别是区域设置支持)、用于查看 CSV 文件的工具、 终端,将 CSV 文件导入到的工具 (Excel...)。如果它们都使用相同的编码,例如:UTF-8,你应该没问题,但在 Windows 系统上,由于历史原因,UTF-8 支持仍然不是通用的。您使用的土耳其语区域设置可能使用 8 位编码,例如 ISO-8859-9 或 Windows 特定代码页 857,它们与 UTF-8 不兼容。ŞĞİ

对于非 ASCII 文本内容,推荐的方法是现在使用 UTF-8(对 Unicode 码位进行编码),因为相同的标准可用于所有人类语言,因此可以被认为是通用的。

区域设置仍会确定您的案例中的某些特定变体,例如土耳其语特定案例转换:

  • i转换为大写而不是İI
  • I转换为小写而不是 .ıi

因此,我建议您查看上述所有工具的配置,并尝试选择 UTF-8 作为默认编码。如果无法做到这一点,请尝试尽可能选择相同的编码,并在需要时使用翻译过滤器转换文件内容。

评论

0赞 greg spears 11/6/2023
说得好。旁白:逗号 (,) 字符在普通文本中出现时也需要注意,这样就不会无意中创建新的单元格/列。
0赞 muratkavak 11/10/2023
ı 仍然不能写 UTF-8 字符。ı 猜测 ı 我不熟练
0赞 chqrlie 11/10/2023
@muratkavak:我更有可能责怪你使用的操作系统,这似乎没有帮助。