web-dev-qa-db-ja.com

C#でのUnicode変換

文字列にUnicodeを割り当てようとしていますが、「Привет」文字列が「ПривеÑ」として返されますが、「Привет」が必要です。次の関数で変換しています。

public string Convert(string str)
{
    byte[] utf8Bytes = Encoding.UTF8.GetBytes(str);
    str = Encoding.UTF8.GetString(utf8Bytes);
    return str;
}

この問題を解決して「Привет」を返すにはどうすればよいですか。

6
manoj

_П_はUnicode文字 x041F であり、そのUTF-8エンコーディングは_0xD0 0x9F_であり、結果として _П_ になります。

コメント提供者がすでに説明したように、関数は入力パラメーターのみを返すため、元の入力文字列は実際にはUTF-8であり、ネイティブの.Net文字列に変換すると結論付けます。

元の文字列はどこから来たのですか?

入力をC#stringに読み込む代わりに、コードを_byte[]_を読み取るように変更してから、Encoding.UTF8.GetString(inputUtf8ByteArray)を呼び出します。

8
devio

以下のコードを試してみましたが、結果は次のとおりです。

        string test="Привет";
        byte[] utf8Bytes = Encoding.UTF8.GetBytes(test);

        String str1 = Encoding.Unicode.GetString(utf8Bytes);
        String str2 = Encoding.UTF8.GetString(utf8Bytes);

Str1 =鿐胑룐닐뗐苑の出力

Str2 =Приветの出力

4
Peter H