【发布时间】:2014-04-22 11:14:53
【问题描述】:
我正在解析来自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。
如果可能的话,谁能给我正确的方向来解决这个问题?
【问题讨论】:
-
� 是替换字符,编码器使用它来指示他们无法识别文本流中的 byte(s)。例如在使用 8859-1 代码页编码的文本上错误地使用 Encoding.UTF8。之后您无法修复它,您已经丢失了原始字节值。它必须在源头固定。
-
@HansPassant 是的,我对此有所了解,但完全不清楚。感谢您的解释,我希望对 � 做点什么,但现在我知道这是不可能的(我也无权访问远程网站源),所以他们似乎遇到了编码问题。
标签: c# encoding utf-8 character-encoding iso-8859-1