You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C语言向CSV文件写入UTF-8字符并解决列显示异常问题

解决C语言写入CSV的两个问题:UTF-8字符输出与单元格合并

一、解决所有数据写入单个单元格的问题

你的代码逻辑本身没问题,出现单元格合并通常是以下原因导致:

  1. 系统CSV分隔符不匹配
    很多地区(如土耳其、欧洲部分国家)的系统默认用分号(;)作为CSV列分隔符,而非逗号(,)。若你的电脑区域设置如此,Excel或表格软件会把逗号当成普通文本,将所有内容塞进一个单元格。
    解决方法:把代码中的逗号替换为分号:

    fprintf(file, "Ad; Soyad; Yaş\n");
    fprintf(file, "John; Doe; 30\n");
    fprintf(file, "Jane; Smith; 25\n");
    
  2. 缺少UTF-8 BOM头
    旧版Excel等软件无法自动识别无BOM的UTF-8 CSV文件,会导致解析异常。可在文件开头写入UTF-8 BOM(三个字节:0xEF, 0xBB, 0xBF):

    // 写入其他内容前先输出BOM
    fputs("\xef\xbb\xbf", file);
    
  3. 换行符不兼容Windows系统
    Windows下文本文件的标准换行是\r\n,若代码仅用\n,部分软件可能无法正确识别换行,导致内容堆叠。可将换行符改为\r\n:

    fprintf(file, "Ad, Soyad, Yaş\r\n");
    

二、写入UTF-8字符(如Ş、Ğ、İ)

C语言处理UTF-8字符很直接,只需满足两个核心条件:

  1. 源代码保存为UTF-8编码
    你的.c文件必须以UTF-8编码保存(带不带BOM均可),确保编译器能正确识别Ş、Ğ、İ这些字符的UTF-8字节序列。

  2. 避免系统编码干扰
    最稳妥的方式是用二进制模式打开文件,防止系统自动转换换行符或编码:

    FILE *file = fopen("veriler.csv", "wb");
    

    若用二进制模式,需手动适配不同系统的换行符,可通过宏定义实现:

    #ifdef _WIN32
    #define NEWLINE "\r\n"
    #else
    #define NEWLINE "\n"
    #endif
    

    完整示例代码:

    #include <stdio.h>
    
    #ifdef _WIN32
    #define NEWLINE "\r\n"
    #else
    #define NEWLINE "\n"
    #endif
    
    int main() {
        FILE *file = fopen("veriler.csv", "wb");
    
        if (file == NULL) {
            printf("Dosya açma hatası!\n");
            return 1;
        }
    
        // 写入UTF-8 BOM适配旧版Excel
        fputs("\xef\xbb\xbf", file);
    
        // 写入普通数据行
        fprintf(file, "Ad, Soyad, Yaş%s", NEWLINE);
        fprintf(file, "John, Doe, 30%s", NEWLINE);
        fprintf(file, "Jane, Smith, 25%s", NEWLINE);
        // 写入带UTF-8特殊字符的行
        fprintf(file, "Mehmet, Kaya, 28%s", NEWLINE);
        fprintf(file, "Ayşe, Şahin, 24%s", NEWLINE);
        fprintf(file, "Mustafa, Ğök, 32%s", NEWLINE);
    
        fclose(file);
        printf("CSV dosyası oluşturuldu.\n");
    
        return 0;
    }
    

额外提示

  • 新版Excel或LibreOffice只需逗号分隔+带BOM的UTF-8编码,就能正常显示列和特殊字符。
  • 测试时可先用文本编辑器打开CSV文件,确认分隔符和特殊字符是否正确,再用表格软件打开。

内容的提问来源于stack exchange,提问作者muratkavak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 23:30:23