加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用jsoup的奇怪编码行为

发布时间:2020-12-15 08:44:16 所属栏目:Java 来源:网络整理
导读:我用jsoup从不同页面的html源代码中提取一些信息.其中大多数是UTF-8编码的.其中一个是用ISO-8859-1编码的,这导致了一个奇怪的错误(在我的选择中). 包含错误的页面是: http://www.gudi.ch/armbanduhr-metall-wasserdicht-1280×960-megapixels-p-560.html 我
我用jsoup从不同页面的html源代码中提取一些信息.其中大多数是UTF-8编码的.其中一个是用ISO-8859-1编码的,这导致了一个奇怪的错误(在我的选择中).

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

我用以下代码读取了所需的String:

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百万像素”中的连字符.像??ü这样的正常变音符号被正确读取.只有这个单一字符,没有输出为“-”出现问题.

我试图用out.outputSettings().charset(“ISO-8859-1”)覆盖(正确设置)页面编码,但这也没有帮助.

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

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

谢谢

解决方法

这是网站本身的错误.这实际上是三个错误:

> HTTP Content-Type响应头中没有任何charset提供页面. HTML元标记中有ISO-8859-1,但是当通过HTTP提供页面时,这会被忽略!平均webbrowser将尝试智能检测或使用平台默认编码对网页进行编码,即Windows机器上的CP1252.
>< meta>标签假装内容是ISO-8859-1编码的,但实际字符 – (U+2013 EN DASH)根本不是covered的字符集.然而,07122由CP1252字符集为0x0096.
>根据网页源代码,产品名称使用文字字符 – 而不是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();
// ...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读