2

文字列を base64 でエンコードされた文字列に変換する SQL 関数があります。唯一の問題は、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 を使用する方法はありますか?

4

1 に答える 1

0

@sInputはNVARCHAR、つまりUNICODEUCS-2です。つまり、UCS-2をバイナリに変換しているのです。

入力パラメーターをvarbinaryに変更し、UTF-8をバイナリとして関数に渡すことができます。関数へのソースデータもSQLからのnvarcharである場合は、そのバイナリデータ変換をソースC#にプッシュし続ける必要があります(おそらくvarbinaryとしてのストレージのポイントまで、基本的に残りの部分が何であるかはわかりませんシステムは次のようになります)。

別の方法は、この関数をCLRで作成することです。C#を使用してUCS-2をUTF-8に変換してから、Base64エンコーディングも実行します。

于 2013-01-26T06:36:39.303 に答える