我在分析从回应一些网页内容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
。
有人可以给我正确的方向,如果可能的话,要解决这个问题?
有问题的词是“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。