0

" " のような文字列がありますCHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=58=2D=54=65=73=74(58=2D=54=65=73=74)c# を使用している最後の部分をデコードする必要があり ます。この文字列は、Amazon s3 に保存されている連絡先ファイルから取得されます。次のコードを使用しようとしましたが、同じテキストを取得しています

buffer = Encoding.UTF8.GetBytes(encodedText);
                                buffer = Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding("windows-1252"), buffer);
                                text = Deco.ASCII.GetString(buffer);
4

1 に答える 1

3

文字列をUTF8にエンコードしています

いいえ、UTF8で文字列をエンコードすることはできません。.NETでは、すべての文字列はUnicode(UTF16)でエンコードされています。

コード例で行っているのは、文字列(常にUnicodeであることを忘れないでください)をUTF-8でエンコードされたバイト配列に変換し、それをWindows-1252バイト配列に変換して、最後にこのバイト配列をASCIIエンコーディングを使用した文字列。

ここで何をしようとしているのかは明確ではありませんが、UTF-8からWindows-1252を通過し、最後にASCIIに変換するすべての変換を実行すると、ターゲットエンコーディングでサポートされていない文字が失われる可能性があります。

ただし、覚えておくべき最も重要なことは、エンコードは、バイト配列を前後に変換する場合にのみ意味があるということです。バイト配列がエンコードされます。

取得した壊れた文字列(encodedText変数)を修正しようとしている場合は、この文字列を取得しているコードを修正する必要があります。一部のエンコーディングを使用して、後で壊れた文字列を修正することはできません。


アップデート:

=58=2D=54=65=73=74これがUTF-8バイト配列のHEX表現であると想定して、対応する文字列値に解析しようとしているようです。

これを行う方法は次のとおりです。

string encodedText = "=58=2D=54=65=73=74";
encodedText = encodedText.Replace("=", string.Empty);
byte[] buffer = HexToByte(encodedText);
string text = Encoding.UTF8.GetString(buffer);

関数は次のようになりHexToByteます。

private static byte[] HexToByte(string hexString)
{
    byte[] returnBytes = new byte[hexString.Length / 2];
    for (int i = 0; i < returnBytes.Length; i++)
    {
        returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
    }
    return returnBytes;
}
于 2013-02-20T12:11:05.327 に答える