提问人:muratkavak 提问时间:11/5/2023 最后编辑:chqrliemuratkavak 更新时间:11/5/2023 访问量:102
如何使用 C 将 utf-8 字符写入 csv 文件?
How can I write utf-8 characters to a csv file with C?
问:
如何在 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;
}
答:
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:我更有可能责怪你使用的操作系统,这似乎没有帮助。
评论
fprintf(file, "Ad; Soyad; Yaş\n");
fprintf(file, "==> \xc5\x9e <==")
fgets(...)
fputs(...)