如何用 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;
}
您的问题中有 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 作为默认编码。如果这是不可能的,请尝试尽可能选择相同的编码,并在需要时使用翻译过滤器转换文件内容。