Unity中JsonConvert.DeserializeObject反序列化重音字符乱码的解决方法
解决Unity中Newtonsoft.Json解析重音字符乱码问题
核心原因
问题出在File.ReadAllText(fileName)的默认编码逻辑上:Windows环境下该方法默认用ANSI编码读取文件,但你的JSON文件实际是UTF-8编码(记事本能正常识别就是证明),编码不匹配直接导致重音字符解析乱码。
具体修复方案
方案1:指定UTF-8编码读取文件
直接修改读取代码,明确指定用UTF-8编码(兼容带BOM的UTF-8文件):
var jsonContent = File.ReadAllText(fileName, Encoding.UTF8); var humans = JsonConvert.DeserializeObject<List<Human>>(jsonContent);
方案2:统一JSON文件编码(可选)
如果方案1生效后仍有异常,可先规范JSON文件的编码:
- 用记事本打开JSON文件,点击「文件」→「另存为」
- 在「编码」下拉框选择「UTF-8」(避开「UTF-8 BOM」选项),覆盖保存文件
- 再用方案1的代码读取即可
方案3:全局配置Newtonsoft.Json编码规则(进阶)
如果需要统一处理所有非ASCII字符,可在反序列化时添加编码设置:
var settings = new JsonSerializerSettings { StringEscapeHandling = StringEscapeHandling.EscapeNonAscii }; var humans = JsonConvert.DeserializeObject<List<Human>>(jsonContent, settings);
该设置会自动转义非ASCII字符,从根源避免编码兼容问题。
验证方式
解析完成后,将itemLabel的值打印到Unity控制台,或在UI组件中显示,确认é、ü等重音字符是否正常渲染。
内容的提问来源于stack exchange,提问作者MaxK
相关产品推荐
相关产品推荐

