2

ASP.NETページ(ashx)はGET、UTF8文字列を含む要求を受信します。Windows-1255データを使用してSqlServerデータベースを読み取ります。

私は彼らを一緒に働かせることができないようです。私は、SO(主に文字列の文字エンコードをwindows-1252からutf-8に変換する)で収集された情報と、主題に関するmsdnを使用しました。

以下の関数で何かを実行すると、常に開始時と同じようになりますが、まったく変換されません。

何かがおかしいですか?

編集

私が具体的にやろうとしていること(をgetData返すDictionary<int, string>):

getData().Where(a => a.Value.Contains(context.Request.QueryString["q"]))

「'」や「、」などの「ニュートラル」文字を送信しない限り、結果は空です。

コード

    string windows1255FromUTF8(string p)
    {
        Encoding win = Encoding.GetEncoding(1255);
        Encoding utf8 = Encoding.UTF8;

        byte[] utfBytes = utf8.GetBytes(p);
        byte[] winBytes = Encoding.Convert(utf8, win, utfBytes);
        return win.GetString(winBytes);
    }

    string UTF8FromWindows1255(string p)
    {
        Encoding win = Encoding.GetEncoding(1255);
        Encoding utf8 = Encoding.UTF8;

        byte[] winBytes = win.GetBytes(p);
        byte[] utfBytes = Encoding.Convert(win, utf8, winBytes);
        return utf8.GetString(utfBytes);
    }
4

2 に答える 2

1

機能に問題はなく、単に役に立たないだけです。

関数が行うことは、文字列をバイトにエンコードし、データをあるエンコードから別のエンコードに変換してから、バイトをデコードして文字列に戻すことです。文字列にwindows-1255エンコーディングを使用してエンコードできない文字が含まれていない限り、戻り値は入力と同じである必要があります。

.NETの文字列にはエンコーディングがありません。たとえばUTF-8を使用してテキストがエンコードされたソースから文字列を取得した場合、文字列にデコードされると、そのエンコードはなくなります。宛先に特定のエンコーディングがある場合、文字列を使用するために文字列に何もする必要はありません。文字列を取得する使用しているライブラリがエンコーディングを処理します。

于 2013-01-13T12:39:35.727 に答える
0

何らかの理由でこれが機能しました:

byte[] fromBytes = (fromEncoding.UTF8).GetBytes(myString);
string finalString = (Encoding.GetEncoding(1255)).GetString(fromBytes);

変換せずにエンコーディングを切り替える...

于 2013-01-20T08:02:33.517 に答える