2010-08-19 302 views
5

我试图解析从以下网页标题:http://kid37.blogger.de/stories/1670573/Unicode标题,问号的Unicode问题? 65533;

当我使用apache.commons.lang StringEscapeUtils.escapeHTML方法标题元素,我得到以下

Das hermetische Caf�: Rock & Wrestling 2010 

然而,当我在utf-8编码的网页上显示它只是显示一个问号。

使用下面的代码:

String title = StringEscapeUtils.escapeHtml(myTitle); 

如果我通过这个网站运行标题:http://tools.devshed.com/?option=com_mechtools&tool=27我得到以下输出这似乎是正确的

标题:

<title>Das hermetische Café: Rock &amp; Wrestling 2010</title> 

变成(其中我期待的escapeHtml方法):

<title>Das hermetische Caf&eacute;: Rock &amp; Wrestling 2010</title> 

有什么想法?谢谢

回答

20

U + FFFD(十进制65533)是“替换字符”。当解码器遇到无效字节序列时,它可能会(取决于其配置)替代&#xFFFD;对于腐败的序列并继续。

“损坏”序列的一个常见原因是应用了错误的解码器。例如,解码器可能是UTF-8,但页面实际上是使用ISO-8859-1进行编码的(默认情况下,如果未在内容类型标头或等效内容中指定另一个)。

因此,在将字符串传递给escapeHtml之前,“eacute;”已经被替换为“&#xFFFD;”;该方法正确编码。

有问题的页面使用ISO-8859-1编码。确保在将提取的资源转换为String时使用该解码器。

+0

你是正确的我调整到iso-8859-1,它正确处理。非常感激。 – James 2010-08-20 00:37:16