Base64字符串编码C#与TSQL

时间:2017-11-02 09:34:19

标签: c# tsql base64

我在C#和TSQL中有base64字符串编码/解码函数,我的问题是C#的编码结果与TSQL中的编码结果不同。

我的目标是:

  1. C#编码的字符串应在TSQL中解码,反之亦然
  2. 这两个函数都应该具有编码/解码unicode字符的能力
  3. C#

    Convert.ToBase64String(Encoding.UTF8.GetBytes("test"));
    
    Result: dGVzdA==
    

    TSQL

    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=
    

    知道如何匹配结果吗?

2 个答案:

答案 0 :(得分:4)

SQL Server正在使用UTF-16。您的C#代码使用的是UTF-8,因此存在差异。

要使C#代码使用UTF-16,您可以这样做:

Convert.ToBase64String(Encoding.Unicode.GetBytes("test"))

Result: dABlAHMAdAA=

答案 1 :(得分:1)

获得您的愿望结果使用以下TSQL

SELECT CAST('test' as varbinary(max)) FOR XML PATH(''), BINARY BASE64