我已将字符串编码为 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;
}