jsoup 的奇怪编码行为

2024-05-07

我用jsoup从不同页面的html源代码中提取一些信息。大多数都是UTF-8编码的。其中一个是用 ISO-8859-1 编码的,这会导致一个奇怪的错误(在我看来)。

包含错误的页面是:http://www.gudi.ch/armbanduhr-metal-wasserdicht-1280x960- MP3-p-560.html http://www.gudi.ch/armbanduhr-metall-wasserdicht-1280x960-megapixels-p-560.html

我用以下代码读取了所需的字符串:

Document doc = Jsoup.connect("http://www.gudi.ch/armbanduhr-metall-wasserdicht-1280x960-megapixels-p-560.html").userAgent("Mozilla").get();
String title = doc.getElementsByClass("products_name").first().text();

问题出在字符串“HD Armbanduhr aus Metall 4GB Wasserdicht 1280X960 – 5 Megapixels”中的连字符。正常的元音变音如 öäü 可以正确读取。仅此单个字符,不会输出为“-”造成问题。

我尝试使用 out.outputSettings().charset("ISO-8859-1") 覆盖(正确设置的)页面编码,但这也没有帮助。

接下来,我尝试手动将 Charset 类的字符串编码从 utf8 和 iso-8859-1 更改为 utf8 和 iso-8859-1。也没有运气。

有人提示我在使用 jsoup 解析 html 文档后可以尝试获取正确的字符吗?

Thanks


这是网站本身的错误。其实是三个错误:

  1. 页面已送达withoutHTTP 中的任何字符集Content-Type响应头。有ISO-8859-1在 HTML 元标记中,但是当通过 HTTP 提供页面时,这将被忽略!一般的网页浏览器要么尝试智能检测,要么使用平台默认编码对网页进行编码,在 Windows 机器上为 CP1252。

  2. The <meta>标签假装内容是 ISO-8859-1 编码的,但实际字符 (U+2013 EN 破折号 http://www.fileformat.info/info/unicode/char/2013/index.htm) is not covered http://en.wikipedia.org/wiki/ISO/IEC_8859-1#Codepage_layout完全由该字符集决定。然而却是covered http://en.wikipedia.org/wiki/Windows-1252#Codepage_layoutCP1252 字符集为0x0096.

  3. 根据网页源码,产品名称使用文字字符而不是 HTML 实体&ndash;正如同一网页上其他地方所发现的那样。

Jsoup 可以透明地修复许多开发不良的网页,但这一个确实超出了 Jsoup 的范围。您需要手动读入它,然后将其作为 CP1252 提供给 Jsoup。

String url = "http://www.gudi.ch/armbanduhr-metall-wasserdicht-1280x960-megapixels-p-560.html";
InputStream input = new URL(url).openStream();
Document doc = Jsoup.parse(input, "CP1252", url);
String title = doc.select(".products_name").first().text();
// ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jsoup 的奇怪编码行为 的相关文章

随机推荐