C# Blazor中File.ReadAllText读取同内容JSON文件编码异常问题
问题分析与解决方案
核心原因
你遇到的问题本质是两个JSON文件的底层编码完全不同,和代码逻辑无关:
- 项目1的JSON文件是UTF-8编码:字符“ö”在UTF-8中占2字节(
C3 B6),这也是标准JSON推荐的编码格式 - 项目2的JSON文件是单字节编码(大概率是Windows-1252或ISO-8859-1):“ö”在这类编码中是单字节
F6
为什么会出现这些奇怪现象?
- 复制内容无效但复制文件修改有效:复制内容时,编辑器会用当前目标文件的编码保存内容,把UTF-8的内容粘到Windows-1252的文件里,编辑器会自动转码导致混乱;而直接复制项目1的文件,相当于把UTF-8的编码属性一并复制,修改时编辑器会沿用原文件的UTF-8编码保存。
- 记事本写入差异:记事本会根据文件原有编码自动选择保存编码,项目1的文件是UTF-8,写入“ö”时生成UTF-8的
C3 B6;项目2的文件是单字节编码,写入时就生成对应单字节的F6。 - 强制用UNICODE(UTF-16)读取失败:因为文件本身不是UTF-16编码,硬用UTF-16解析自然会出现乱码。
解决方法
1. 统一读取代码的编码指定
不管文件实际编码是什么,强制用UTF-8读取(符合JSON标准),修改读取代码:
var jsonContent = File.ReadAllText("your-file-path.json", Encoding.UTF8);
2. 确保新建JSON文件用UTF-8编码保存
- 在Visual Studio中:右键JSON文件 → 属性 → 高级 → 编码选择“UTF-8 无签名”或“UTF-8 带签名”
- 在记事本中:保存时选择“编码”为UTF-8,不要选默认的ANSI
- 在VS Code等编辑器中:通过右下角状态栏切换文件编码为UTF-8后保存
3. 修复已有的异常文件
直接在编辑器中打开项目2的异常JSON文件,切换编码为UTF-8后重新保存即可,无需重新复制内容。
内容的提问来源于stack exchange,提问作者MadisJu
相关产品推荐
相关产品推荐

