Base64在SQL中编码utf8字符串

时间:2013-01-14 13:49:49

标签: c# sql string utf-8 base64

我有一个SQL函数,用于将字符串转换为base64编码的字符串。唯一的问题是UTF8没有被使用,我可以告诉我,因为我有一个单独的C#工具,可以提供不同的输出。

SQL函数:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER FUNCTION [dbo].[Base64Encode] ( @sInput NVARCHAR(max) )
RETURNS NVARCHAR(max)
BEGIN

DECLARE @vInput              VARBINARY(max)
DECLARE @sEncodedOutput      NVARCHAR(max)

set @vInput = convert(varbinary(max), @sInput)
set @sEncodedOutput = cast('' as xml).value('xs:base64Binary(sql:variable("@vInput"))', 'NVARCHAR(max)')

RETURN @sEncodedOutput

END

C#

        try
        {
            encodedValueTextbox.Text = Convert.ToBase64String(
                Encoding.UTF8.GetBytes(valueTextbox.Text));
        }
        catch (Exception ex)
        {
            encodedValueTextbox.Text = ex.Message;
        }

有没有办法让SQL使用UTF8?

1 个答案:

答案 0 :(得分:0)

你的@sInput是NVARCHAR,它是UNICODE UCS-2。所以,你将UCS-2变成二进制。

您可以将输入参数更改为varbinary,并将UTF-8作为二进制文件传递给函数。如果您的源数据也是来自SQL的nvarchar,您需要继续将二进制数据转换回源C#(也许作为varbinary存储点,基本上我不知道你的其余部分是什么系统看起来像。)

另一种方法是在CLR中编写此函数。使用C#将UCS-2转换为UTF-8,然后在那里进行Base64编码。