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

无需临时文件,从文件字节提取文本并反序列化为C#对象

解决JSON反序列化时的「Unexpected character encountered」错误

你的测试字节数组开头的255,254是**UTF-16 LE(小端)**的字节序标记(BOM),后续每个JSON字符都以双字节形式存储,说明原文件采用UTF-16编码,而非UTF-8或系统默认编码。

之前使用Encoding.Default或Encoding.UTF8转换字节数组时,会破坏双字节字符结构,生成包含无法识别乱码的字符串,导致JSON解析器抛出「Unexpected character encountered」错误。

修正方案

使用Encoding.Unicode.GetString()(.NET中Encoding.Unicode对应UTF-16 LE编码)转换字节数组,即可得到正确的JSON字符串:

var p = new byte[] { 255, 254, 123, 0, 34, 0, 114, 0, 101, 0, 99, 0, 116, 0, 115, 0, 34, 0, 58, 0, 91, 0, 93, 0, 44, 0, 34, 0, 116, 0, 101, 0, 120, 0, 116, 0, 34, 0, 58, 0, 34, 0, 34, 0, 125, 0 };

// 用UTF-16 LE编码转换字节数组
var p2 = System.Text.Encoding.Unicode.GetString(p);

// 正常执行反序列化
dynamic p3 = JsonConvert.DeserializeObject<dynamic>(p2);

Console.WriteLine(p3.text);
Console.WriteLine(p3.rects);

你也可以使用Encoding.GetEncoding(1200)替代Encoding.Unicode,二者效果完全一致(1200是UTF-16 LE的官方代码页编号)。

内容的提问来源于stack exchange,提问作者Caleb Keller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:05:26