You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# Blazor中File.ReadAllText读取同内容JSON文件编码异常问题

问题分析与解决方案

核心原因

你遇到的问题本质是两个JSON文件的底层编码完全不同,和代码逻辑无关:

  • 项目1的JSON文件是UTF-8编码:字符“ö”在UTF-8中占2字节(C3 B6),这也是标准JSON推荐的编码格式
  • 项目2的JSON文件是单字节编码(大概率是Windows-1252或ISO-8859-1):“ö”在这类编码中是单字节F6

为什么会出现这些奇怪现象?

  1. 复制内容无效但复制文件修改有效:复制内容时,编辑器会用当前目标文件的编码保存内容,把UTF-8的内容粘到Windows-1252的文件里,编辑器会自动转码导致混乱;而直接复制项目1的文件,相当于把UTF-8的编码属性一并复制,修改时编辑器会沿用原文件的UTF-8编码保存。
  2. 记事本写入差异:记事本会根据文件原有编码自动选择保存编码,项目1的文件是UTF-8,写入“ö”时生成UTF-8的C3 B6;项目2的文件是单字节编码,写入时就生成对应单字节的F6。
  3. 强制用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 19:40:30