解码UTF8文本

时间:2013-02-20 12:09:39

标签: c# utf-8 decode

我有像“CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=58=2D=54=65=73=74”这样的字符串。我需要使用c#解码它的最后一部分 (58=2D=54=65=73=74) 。此字符串来自存储在amazon s3中的联系人文件。我尝试使用以下代码,但它检索相同的文本

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

1 个答案:

答案 0 :(得分: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;
}