Base64字符串编码C#vs TSQL
我在C#和TSQL中有base64字符串编码/解码函数,我的问题是C#的编码结果不同于TSQL中的编码结果 我的目标是:Base64字符串编码C#vs TSQL,c#,tsql,base64,C#,Tsql,Base64,我在C#和TSQL中有base64字符串编码/解码函数,我的问题是C#的编码结果不同于TSQL中的编码结果 我的目标是: C#编码字符串应在TSQL中解码,反之亦然 这两个函数都应该能够对unicode字符进行编码/解码 C# TSQL SELECT CAST(N'' AS XML).value('xs:base64Binary(xs:hexBinary(sql:column("bin")))', 'NVARCHAR(MAX)') Base64Encoding FROM ( SEL
SELECT CAST(N'' AS XML).value('xs:base64Binary(xs:hexBinary(sql:column("bin")))', 'NVARCHAR(MAX)') Base64Encoding
FROM
(
SELECT CAST(N'test' AS VARBINARY(MAX)) AS bin
) AS bin_sql_server_temp
Result: dABlAHMAdAA=
知道如何匹配结果吗?SQL Server正在使用UTF-16。您的C#代码使用UTF-8,因此存在差异 要使C代码使用UTF-16,可以执行以下操作:
Convert.ToBase64String(Encoding.Unicode.GetBytes("test"))
Result: dABlAHMAdAA=
SQL Server正在使用UTF-16。您的C#代码使用UTF-8,因此存在差异 要使C代码使用UTF-16,可以执行以下操作:
Convert.ToBase64String(Encoding.Unicode.GetBytes("test"))
Result: dABlAHMAdAA=
要获得您想要的结果,请使用下面的TSQL
SELECT CAST('test' as varbinary(max)) FOR XML PATH(''), BINARY BASE64
要获得您想要的结果,请使用下面的TSQL
SELECT CAST('test' as varbinary(max)) FOR XML PATH(''), BINARY BASE64
除非“test”不是unicode。如果您将其更改为N'test',您将再次得到与所讨论的相同的结果。@ChiragMM从问题中得出:“我的目标是:[…]两个函数都应该具有编码/解码unicode字符的能力”,因此看起来它必须是unicode。除了“test”不是unicode之外。如果您将其更改为N'test'-您将再次得到与所讨论的相同的结果。@ChiragMM从问题中得到:“我的目标是:[…]两个函数都应该具有编码/解码unicode字符的能力”,因此看起来它必须是unicode。感谢您的解释,您的解决方案按预期运行,现在我清楚地了解了为什么它运行良好。感谢您的解释,您的解决方案按预期运行,现在我清楚地了解了为什么它运行良好。