【发布时间】:2011-12-04 14:51:31
【问题描述】:
我用jsoup从不同页面的html源代码中提取了一些信息。它们中的大多数是 UTF-8 编码的。其中一个是用 ISO-8859-1 编码的,这会导致一个奇怪的错误(在我的选择中)。
包含错误的页面是: 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 文档后可以尝试获取正确的字符吗?
谢谢
【问题讨论】:
-
嗯,这是一个— (e2 80 93),在 UTF-8 下应该是一个有效字符(我认为)。是否有可能一旦读入 8859-1 就无法将其转换回来?您可以将其强制读取为 UTF-8 吗?
-
是的,我可以用 out.outputSettings().charset("UTF-8") 强制它,但这并没有真正的帮助。当我想显示字符代码时,结果是 charcode 150,它应该是有效的,如本页所示:web-source.net/symbols.htm。有了这个,我意识到 char 不是连字符或破折号,它是 45。charcode 150 在扩展的 ascii 字符集中。
标签: java html character-encoding html-parsing jsoup