Pas*_*hys 3 html java character-encoding html-parsing jsoup
我用jsoup从不同页面的html源代码中提取一些信息.其中大多数是UTF-8编码的.其中一个用ISO-8859-1编码,这导致了一个奇怪的错误(在我的选择中).
包含错误的页面是:http: //www.gudi.ch/armbanduhr-metall-wasserdicht-1280x960-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();
Run Code Online (Sandbox Code Playgroud)
问题是字符串"HD Armbanduhr aus Metall 4GB Wasserdicht 1280X960 - 5百万像素"中的连字符.像öäü这样的正常变音符号被正确读取.只有这个单一字符,没有输出为"-" 出现问题.
我试图用out.outputSettings().charset("ISO-8859-1")覆盖(正确设置)页面编码,但这也没有帮助.
接下来,我尝试使用Charset类将字符串的编码从手动更改为utf8和iso-8859-1.也没有运气.
在使用jsoup解析html文档后,有人提示我可以尝试获取正确的字符吗?
谢谢
这是网站本身的错误.这实际上是三个错误:
在HTTP 响应头中没有任何字符集的情况下提供页面Content-Type.有ISO-8859-1在HTML meta标签,但在页面都通过HTTP这个被忽略!平均webbrowser将尝试智能检测或使用平台默认编码对网页进行编码,即Windows机器上的CP1252.
该<meta>标签假装内容是ISO-8859-1编码的,但实际的字符–(U + 2013 EN DASH)是不能 覆盖由字符集的.然而它被CP1252字符集所覆盖0x0096.
根据网页源代码,产品名称使用文字字符–而不是HTML实体,–如同在同一网页上的其他位置发现的那样.
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();
// ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8558 次 |
| 最近记录: |