读取含短破折号、左右引号等特殊字符CSV文件的编码问题
解决ANSI编码CSV文件读取时特殊字符显示异常的问题
这问题根源很清晰——你用UTF-8编码去读取实际为ANSI编码的CSV文件,编码不匹配直接导致短破折号(–)、左右双引号(“”)这类特殊字符无法被正确解析,出现方框或菱形问号的乱码。
为什么会这样?
Windows里的「ANSI编码」其实对应系统默认的代码页:比如中文系统通常是GBK(代码页936),英文系统多为Windows-1252。当你用UTF-8读取非UTF-8编码的文件时,字节序列被错误解码,自然就出现乱码。而你手动写入特殊字符能正常显示,是因为写入时直接用UTF-8编码保存,读取环境能正确识别这部分内容。
修正方案
读取文件时,改用与源文件匹配的ANSI编码即可:
方案1:使用系统默认ANSI编码(简单直接)
// 替换原读取代码,用系统默认ANSI编码读取 string[] lines = File.ReadAllLines(filePathTxt.Text, Encoding.Default);
方案2:指定具体代码页(更精准)
如果用Notepad++看到源文件的ANSI对应具体代码页(比如英文系统的Windows-1252,中文系统的GBK),可以直接指定:
// 英文系统示例:Windows-1252编码 string[] lines = File.ReadAllLines(filePathTxt.Text, Encoding.GetEncoding(1252)); // 中文系统示例:GBK编码 // string[] lines = File.ReadAllLines(filePathTxt.Text, Encoding.GetEncoding(936));
额外说明
如果后续希望把文件统一转成UTF-8编码保存,读取时用正确的ANSI编码解析后,再用你现有的UTF-8写入代码保存即可,这样后续读写就不会再出现编码问题。
内容的提问来源于stack exchange,提问作者Brent Kilboy
相关产品推荐
相关产品推荐

