我正在解析来自HttpWebRequest
的响应中的一些web内容。
此web内容使用字符集ISO-8859-1
,当解析它并最终从响应中获得所需的单词时,我收到一个带有问号的string
,如�
,我想知道哪是将其转换回可读的string
的正确方法。
所以,我所尝试的是将当前单词encoding
转换为UTF-8
,像这样:
(我想知道UTF-8
是否可以解决我的问题)
string word = "ESPA�OL";
Encoding iso = Encoding.GetEncoding("ISO-8859-1");
Encoding utf = Encoding.GetEncoding("UTF-8");
byte[] isoBytes = iso.GetBytes(word);
byte[] utfBytes = Encoding.Convert(iso, utf, isoBytes);
string utfWord = utf.GetString(utfBytes);
Console.WriteLine(utfWord);
但是utfWord
变量输出的ESPA?OL
仍然是错误的。正确的输出应该是ESPAÑOL
。
这个词是"ESPAÑOL"。这可以在ISO-8859-1中正确编码,因为单词中的所有字符都在ISO-8859-1中表示。
您可以使用下面的简单程序自己看到:
using System;
using System.Diagnostics;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Encoding enc = Encoding.GetEncoding("ISO-8859-1");
string original = "ESPAÑOL";
byte[] iso_8859_1 = enc.GetBytes(original);
string roundTripped = enc.GetString(iso_8859_1);
Debug.Assert(original == roundTripped);
Console.WriteLine(roundTripped);
}
}
}
这告诉你,你需要正确地诊断错误字符来自哪里。等到你有了"性格"的时候,已经太晚了。信息丢失了。字符的存在表明,在某个时刻,执行了转换到不包含字符Ñ的字符集。
从ISO-8859-1转换为Unicode编码将正确处理"ESPAÑOL",因为该单词可以用ISO-8859-1编码。
最可能的解释是,在过程中的某个地方,文本"ESPAÑOL"被转换为不包含字母Ñ的字符集。