处理包含“问号”的字符串进行编码时的问题()(Encoding issue when handlin

2019-10-19 14:39发布

我在分析从回应一些网页内容HttpWebRequest

此网页内容使用的字符集ISO-8859-1和解析,并终于得到从响应所需的字,我收到一个当string带有问号这样的,我想知道这是转变的正确方法回一个可读string

所以,我已经试过是当前字转换encodingUTF-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

有人可以给我正确的方向,如果可能的话,要解决这个问题?

Answer 1:

有问题的词是“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编码A转换将正确地处理“ESPAÑOL”,因为这个词可以在ISO-8859-1进行编码。

最有可能的解释是,沿途某处,文本“ESPAÑOL”被转换为字符集不包含字母n。



文章来源: Encoding issue when handling a string that contains “question mark” (�)