处理包含“问号”的字符串时的编码问题( )

时间:2014-03-17 09:52:10

标签: c# encoding utf-8 character-encoding iso-8859-1

我正在解析来自HttpWebRequest的回复中的一些网络内容。

此网页内容使用字符集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

如果可能的话,有人可以给我正确的解决方法吗?

1 个答案:

答案 0 :(得分:4)

有问题的词是“ESPAÑOL”。这可以在ISO-8859-1中正确编码,因为单词中的所有字符都是represented in 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”正在转换为不包含字母Ñ的字符集。