读取含匈/塞特殊字符的文件时字符显示异常求助
解决Excel导出TSV文件特殊字符读取乱码问题
先确认文件实际编码
Excel导出制表符分隔文本时,默认编码大概率不是ISO-8859-2,常见的是UTF-8(带BOM)或者Windows-1250(中欧专用编码,和ISO-8859-2有细微差异)。可以用记事本打开目标文件,点击「文件」-「另存为」,底部显示的编码就是文件实际使用的编码。匹配StreamReader的编码设置
根据实际编码调整读取代码:- 如果是UTF-8(带BOM):直接用
Encoding.UTF8(StreamReader默认会自动识别UTF-8 BOM) - 如果是Windows-1250:用
Encoding.GetEncoding("windows-1250")
示例代码:
try { using(FileStream fs = new FileStream("DB.txt", FileMode.OpenOrCreate)) { // 替换为文件实际编码,比如UTF-8 using(StreamReader sr = new StreamReader(fs, Encoding.UTF8)) { while(!sr.EndOfStream) { string[] s = sr.ReadLine().Split('\t'); // 后续逻辑不变 } } } } catch(Exception) { throw; }- 如果是UTF-8(带BOM):直接用
乱码原因说明
你看到的körte变成kĂśrte是典型的编码不匹配错误:UTF-8中ö是双字节0xC3 0xB6,但用ISO-8859-2解码这两个字节时,会分别解析成Ă和ś,正好对应你遇到的乱码。而读写文件时因为两端都用了错误的ISO-8859-2编码,相当于做了一次错误编码+错误解码的反向操作,所以文件内容看起来正常,但内存中的字符串已经损坏。额外建议
- 导出Excel文件时,直接选择明确的编码(比如UTF-8),避免后续编码匹配问题。
- 调试时可以对比字节:用
Encoding.UTF8.GetBytes(s[0])和文件原始字节对比,确认哪种编码能正确解析出目标字符。
内容的提问来源于stack exchange,提问作者Gaga02
相关产品推荐
相关产品推荐

