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

SQL Server varbinary转JSON:byte[]与string编解码不一致问题

问题根源分析

你的代码里用System.Text.Encoding.Unicode(即UTF-16编码)做byte[]和string的互转,但不是所有字节序列都能被UTF-16合法解析为Unicode字符:

  • 调用GetString时,如果原byte数组包含UTF-16无法识别的无效字节组合(比如不完整的代理对、无对应字符的编码值),.NET会自动把这些无效部分替换成替换字符U+FFFD(对应UTF-16字节为0xFD 0xFF)。
  • 后续调用GetBytes时,替换字符会被转成它对应的字节序列,最终导致新生成的byte数组和原数组不一致。
正确处理方式

varbinary存储的是任意二进制数据,不能用字符编码来转string(字符编码是处理文本数据的,不适合二进制数据)。如果要把二进制数据转成可安全序列化到JSON的string,应该用Base64编码:

// 二进制转Base64字符串
string base64Str = Convert.ToBase64String((byte[])value);
// Base64字符串转回二进制
byte[] newBytes = Convert.FromBase64String(base64Str);
bool isEqual = newBytes.SequenceEqual((byte[])value); // 此处会返回true

Base64是专门将二进制数据编码为ASCII字符串的方案,能保证二进制与字符串之间的无损互转,完全适配你把varbinary列数据转成JSON格式存储或传输的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:39:50