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 字节数组的十六进制表示,您似乎正在尝试解析为相应的字符串值。

您可以这样做:

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 回答