我正在解析来自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
。
如果可能的话,有人可以给我正确的解决方法吗?
答案 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”正在转换为不包含字母Ñ的字符集。