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

ASP.NET Core中StreamReader读取iso-8859-1编码CSV时度数符号识别异常求助

解决ASP.NET Core读取Mac Excel CSV(ISO-8859-1)中度数符号显示问题

我来帮你排查这个问题,之前也碰到过Mac上Excel导出CSV的编码坑,给你几个可行的方向:

  • 先确认StreamReader的读取逻辑是否正确
    确保你用了正确的编码初始化StreamReader,并且正确处理了文件流。推荐用异步读取+using语句确保资源释放:

    // 假设file是IFormFile类型的上传文件
    using var stream = file.OpenRead();
    using var reader = new StreamReader(stream, Encoding.GetEncoding("iso-8859-1"));
    var content = await reader.ReadToEndAsync();
    
  • 排查是否是调试窗口的显示问题
    有时候Visual Studio for Mac的调试本地窗口编码设置可能会导致字符显示异常,但实际字符串是正确的。你可以在代码里直接验证度数符号的Unicode码点:

    // 检查内容中是否包含度数符号的Unicode值U+00B0
    var hasDegreeSymbol = content.Contains('\u00B0');
    // 或者遍历字符打印码点
    foreach (char c in content)
    {
        if ((int)c == 0xB0)
        {
            Console.WriteLine("成功读取到度数符号,码点:0xB0");
        }
    }
    

    如果代码能检测到这个字符,说明读取是正确的,只是调试窗口显示的问题。

  • 尝试MacRoman编码读取
    虽然file -I命令显示是ISO-8859-1,但Mac上的Excel有时候导出CSV会偷偷用MacRoman编码(两者大部分字符一致,但个别场景有差异)。你可以替换编码试试:

    using var reader = new StreamReader(stream, Encoding.GetEncoding("macintosh"));
    
  • 避免后续编码转换错误
    如果你需要把读取的内容转成UTF-8用于存储或返回前端,一定要用正确的编码转换方式,不要直接硬转:

    // 先把ISO-8859-1的字符串转成字节数组,再转成UTF-8字符串
    var isoBytes = Encoding.GetEncoding("iso-8859-1").GetBytes(content);
    var utf8Content = Encoding.UTF8.GetString(isoBytes);
    

    或者更简单的:StreamReader读取到的已经是.NET的Unicode字符串,直接用UTF-8输出即可,不需要额外转换——因为.NET内部字符串都是Unicode存储的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:34:55