.NET 8 MVC项目文本文件读写连字符乱码问题求助
解决文本文件读写中弯引号乱码问题
问题分析
弯引号(“”)属于Unicode扩展字符,ASCII编码完全不支持这类字符,直接用ASCII读取会导致字符丢失或乱码。而如果读取时未指定与源文件实际编码一致的编码规则,即使写入时选择UTF8/Unicode,也会因为读取阶段的编码错误导致乱码。
解决方案
1. 确认源文件的实际编码
用文本编辑器(如Notepad++)打开源文件,查看其编码格式(常见为UTF-8、UTF-8带BOM、UTF-16、GBK等)。
2. 读取时指定匹配的编码
修改读取代码,显式指定与源文件一致的编码:
- 若源文件为UTF-8(含带BOM/不带BOM):
string wdata = System.IO.File.ReadAllText(file, System.Text.Encoding.UTF8);
- 若源文件为UTF-16(Unicode):
string wdata = System.IO.File.ReadAllText(file, System.Text.Encoding.Unicode);
- 若源文件为GBK/GB2312:
string wdata = System.IO.File.ReadAllText(file, System.Text.Encoding.GetEncoding("GBK"));
3. 写入时保持编码兼容性
推荐使用UTF-8编码写入,确保跨平台兼容性:
System.IO.File.WriteAllText(wfile, wdata, System.Text.Encoding.UTF8);
如果需要和源文件编码完全一致,也可以沿用读取时的编码规则。
4. 特殊情况处理
如果源文件是UTF-8不带BOM,File.ReadAllText默认会使用系统编码读取,这时候必须显式指定Encoding.UTF8才能正确识别字符。
内容的提问来源于stack exchange,提问作者iqworks
相关产品推荐
相关产品推荐

