C#中CP1255编码转UTF-8及CSV文件读取问题
解决C#中读取CP1255编码CSV并转UTF-8的问题
当然有现成的办法!C#的System.Text.Encoding类已经内置了对CP1255(希伯来语字符编码)的原生支持,完全不需要你自己编写编码器。
直接用CP1255编码读取CSV
你只需要把代码里的Encoding.UTF8替换成Encoding.GetEncoding(1255)即可,GetEncoding方法会直接返回对应编码的实例,让StreamReader正确解析文件内容:
// 替换原UTF8编码为CP1255 private static Encoding encoding = Encoding.GetEncoding(1255); // 后续读取逻辑保持不变 var textReader = new StreamReader(reportCsv, encoding); var csv = new CsvReader(textReader, new Configuration { BadDataFound = null, Delimiter = delim });
额外需求:将文件转换为UTF-8格式
如果需要把这份CP1255编码的CSV永久转成UTF-8保存,也可以一次性读取内容后转码写入新文件:
// 读取CP1255编码的文件内容 string csvContent; using (var cp1255Reader = new StreamReader(reportCsv, Encoding.GetEncoding(1255))) { csvContent = cp1255Reader.ReadToEnd(); } // 以UTF-8编码写入新文件 using (var utf8Writer = new StreamWriter("converted_utf8.csv", false, Encoding.UTF8)) { utf8Writer.Write(csvContent); }
小提示
- 如果你使用的是.NET Framework,确保系统中已注册CP1255编码(Windows系统默认自带,无需额外操作);
- 如果你用的是.NET Core/.NET 5+,编码支持是内置的,直接用就行;
- 若遇到编码解析异常,可以给
GetEncoding添加容错配置,比如指定替换字符处理无法解析的字节:Encoding.GetEncoding(1255, new EncoderReplacementFallback("?"), new DecoderReplacementFallback("?"))
内容的提问来源于stack exchange,提问作者Doctor Strange
相关产品推荐
相关产品推荐

