我的C#代码无法读取文件中的特殊字符
解决C#读取特殊字符乱码问题
原因排查与解决方案
- 匹配文件实际编码:你尝试的UTF-8和默认编码无效,大概率是文件本身采用了东欧语言常用的Windows-1250编码,直接指定该编码读取即可:
string[] lines = File.ReadAllLines(filePath, Encoding.GetEncoding(1250)); - 自动检测文件编码:若不确定文件编码,可通过检查字节顺序标记(BOM)初步判断,或借助编码检测逻辑验证:
using (var stream = new FileStream(filePath, FileMode.Open)) { var bom = new byte[4]; stream.Read(bom, 0, 4); Encoding encoding = Encoding.Default; // 根据BOM判断常见编码 if (bom[0] == 0xef && bom[1] == 0xbb && bom[2] == 0xbf) encoding = Encoding.UTF8; else if (bom[0] == 0xff && bom[1] == 0xfe) encoding = Encoding.Unicode; else if (bom[0] == 0xfe && bom[1] == 0xff) encoding = Encoding.BigEndianUnicode; // 重置流位置并读取内容验证 stream.Position = 0; using (var reader = new StreamReader(stream, encoding)) { string content = reader.ReadToEnd(); // 验证特殊字符是否正常显示 } } - 统一编码写入规则:如果文件是你生成的,写入时强制使用带BOM的UTF-8编码,从根源避免编码不匹配:
File.WriteAllLines(filePath, lines, new UTF8Encoding(true)); // true表示生成带BOM的UTF-8文件
内容的提问来源于stack exchange,提问作者AGlasencnik
相关产品推荐
相关产品推荐

