为什么在此网页中没有正确呈现UTF-8字符(使用JSoup生成)?

时间:2011-08-01 16:32:16

标签: java html jsoup

在使用JSoup库解析和呈现页面时遇到Charsets时遇到问题。这是它呈现的页面的示例:

http://dl.dropbox.com/u/13093/charset-problem.html

正如你所看到的那样,应该有'角色'?正在渲染(即使你查看源代码)。

此页面是通过下载网页,使用JSoup进行解析,然后在进行一些结构更改后再次重新呈现来生成的。

我正在按如下方式下载页面:

final Document inputDoc = Jsoup.connect(sourceURL.toString()).get();

当我创建输出文档时,我按如下方式执行:

outputDoc.outputSettings().charset(Charset.forName("UTF-8"));
outputDoc.head().appendElement("meta").attr("charset", "UTF-8");
outputDoc.head().appendElement("meta").attr("http-equiv", "Content-Type")
            .attr("content", "text/html; charset=UTF-8");

任何人都可以就我的错误提出建议吗?

编辑:请注意,源页面为http://blog.locut.us/,如您所见,它似乎正确呈现

2 个答案:

答案 0 :(得分:4)

每当您将字符写入响应的输出流时,问号都是典型的,而响应的字符编码未涵盖这些问号。在提供响应时,您似乎依赖于平台默认字符编码。您网站的回复Content-Type标题也会通过缺少charset属性来确认。

假设您正在使用servlet来提供修改后的HTML,那么您应该在编写修改后的HTML之前使用HttpServletResponse#setCharacterEncoding()设置字符编码

response.setCharacterEncoding("UTF-8");
response.getWriter().write(html);

答案 1 :(得分:0)

问题很可能是在阅读输入页面时,您需要对源进行正确的编码。