处理包含 "question mark" ( ) 的字符串时出现编码问题



我正在解析来自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"被转换为不包含字母Ñ的字符集。

最新更新