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

Unity中C#脚本导出CSV时如何正确插入Unicode字符?

解决Unity导出CSV时Unicode字符(如Δ)乱码的问题

这个问题我之前帮不少开发者解决过——本质是编码不匹配导致的乱码,尤其是CSV在Excel这类工具里的显示问题。当你用默认的StreamWriter创建文件时,它会使用系统默认编码(比如Windows-1252),而Unicode字符(像Δ)在这种编码下无法正确解析,就会变成∆这类乱码。

核心解决方案:使用带BOM的UTF-8编码写入CSV

Excel默认不会自动识别UTF-8编码的CSV,除非文件开头带有UTF-8 BOM(字节顺序标记)。所以我们需要明确指定StreamWriter使用带BOM的UTF-8编码来写入文件。

完整代码示例

下面是Unity中可以直接使用的C#脚本示例,演示如何正确导出包含Unicode字符的CSV:

using System.IO;
using System.Text;
using UnityEngine;

public class CSVExporter : MonoBehaviour
{
    // 可以在Unity编辑器中通过按钮调用这个方法
    public void ExportDataToCSV()
    {
        // 定义CSV文件路径,这里用Unity的持久化数据路径
        string csvPath = Path.Combine(Application.persistentDataPath, "height_data.csv");

        // 关键:使用带BOM的UTF-8编码创建StreamWriter
        // Encoding.UTF8在.NET中默认会添加BOM,确保Excel能识别编码
        using (StreamWriter writer = new StreamWriter(csvPath, false, Encoding.UTF8))
        {
            // 直接写入包含Δ的表头字符串
            writer.WriteLine("Δ Height,Measurement,Timestamp");
            
            // 示例数据行
            writer.WriteLine("2.1,150,2024-05-20 14:30");
            writer.WriteLine("-0.8,148,2024-05-20 14:35");
            writer.WriteLine("1.3,151,2024-05-20 14:40");
        }

        Debug.Log($"CSV文件已成功导出至:{csvPath}");
    }
}

为什么这样能解决问题?

  1. UTF-8编码:支持所有Unicode字符,包括Δ这类特殊符号,确保字符本身不会被转义或损坏。
  2. UTF-8 BOM:Excel需要这个标记来识别文件是UTF-8编码,否则会用系统默认编码读取,导致Unicode字符解析成乱码。

额外注意事项

  • 如果你用Notepad++或其他代码编辑器打开CSV,即使不带BOM也能正常显示UTF-8字符,但Excel必须依赖BOM才能正确识别。
  • 不要使用Encoding.Default,它会根据系统区域选择编码,在不同设备上可能导致不一致的乱码问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:53:03