背景 - 我从网站接收以 UTF-8 编码的 json 格式的响应数据。json 的 body 属性具有 base64binary 类型的值,我将其存储为 ms sql server 上的 nvarchar 类型。
当我将 base64binary 数据转换为 varchar 或 nvarchar 时,我看到有趣的字符(代替双引号)表明存在编码问题 -这就是我问这个问题的原因。
请参阅下面的剖析代码和底部的可运行示例,了解我的担忧。
在转换过程中注意有趣的字符。
例如。代表IRB控股公司(的“公司“)
以下查询修复了上述问题 - 我看到引号应该出现,但随后在包含'&' 的行上失败,这是 xml 中的特殊字符。
select convert(xml, '<?xml version="1.0" encoding="UTF-8"?>' + convert(varchar(max),cast('' as xml).value('xs:base64Binary(sql:column("body"))','varbinary(max)')))
Run Code Online (Sandbox Code Playgroud)
以下查询通过使用replace语句处理上述问题,我能够按预期完全查看所有行。但是这个解决方案只会处理'&'s。
要运行的示例代码:
declare @t table ( [body] nvarchar(max) )
insert into @t(body)
select 'REFMTEFTLCBUWCDigJMgTWF5IDcsIDIwMTkg4oCTIENvdmV5ICYgUGFyayBFbmVyZ3kgSG9sZGluZ3MgTExDICjigJxDb3ZleSBQYXJr4oCdIA=='
select convert(varchar(max),cast('' as xml).value('xs:base64Binary(sql:column("body"))','varbinary(max)'))
, convert(xml, '<?xml version="1.0" encoding="UTF-8"?>'+ replace(convert(varchar(max),convert(varchar(max),cast('' as …Run Code Online (Sandbox Code Playgroud)