【问题标题】:Extract text from html string using Jsoup with specific encoding使用具有特定编码的 Jsoup 从 html 字符串中提取文本
【发布时间】:2017-03-10 04:05:48
【问题描述】:

这就是我所拥有的-

String html = "<p><b>Annie's and Lärabar</b></p>"

运行以下 -

org.jsoup.nodes.Document doc = Jsoup.parse(html);
Element p= doc.select("p").first();
String s = p.text();
System.out.println(s);

输出 - "Annie's and L?rabar".

字符“ä”变成了问号。

我的JVM环境是“iso-8859-1”,在我看来Jsoup的默认编码是utf-8。我想强制 Jsoup.parse() 在解析 html 字符串时使用“iso-8859-1”。

我阅读了 API 和谷歌搜索的示例,但我找不到任何一个示例表明 Jsoup.parse() 在解析字符串时实际上可以采用特定的编码?

有人可以帮忙吗?提前谢谢!

-辛

【问题讨论】:

  • 为什么你认为问题根源是Jsoup 编码?如果您打印原始 HTML,将正确打印变音符号,例如System.out.println(html);?
  • 因为我追踪了代码。该字符一直正确显示,直到“org.jsoup.nodes.Document doc = Jsoup.parse(html);”行之后
  • System.out.println(html); 是否正确地将单词 Lärabar 打印到控制台?如果html 变量内容没有正确打印,那么显然问题不在于Jsoup。您输出到的控制台编码可能存在问题。尝试将程序输出重定向到文件并在文本编辑器中以 UTF8 编码文本形式打开此文件。

标签: java string jsoup iso-8859-1


【解决方案1】:

您可以将字符集设置为文档,如下所示

org.jsoup.nodes.Document doc = Jsoup.parse(html);
doc.charset(Charset charset);
Element p= doc.select("p").first();
String s = p.text();

希望对您有所帮助。 参考:https://jsoup.org/apidocs/org/jsoup/nodes/Document.html#charset-java.nio.charset.Charset-

【讨论】:

  • 您好 AG_,感谢您的回复!我试图设置字符集,但只是在我的 IDE 中键入 doc.charset 我得到了一个语法错误。有什么建议么?谢谢。
  • 您必须将字符集作为参数传递,例如。 doc.charset(Charset.forName("charset name here"));.
  • 在你的情况下: doc.charset(Charset.forName("ISO-8859-1"));并导入 java.nio.charset.Charset
  • 也许我们使用的是不同版本的 Jsoup?我通过在创建文档之后和元素选择之前添加这一行来解决这个问题 - doc.outputSettings().escapeMode(Entities.EscapeMode.xhtml);。有效。谢谢!
猜你喜欢
  • 2019-06-23
  • 1970-01-01
  • 1970-01-01
  • 2012-03-30
  • 2015-06-19
  • 1970-01-01
  • 1970-01-01
  • 2015-05-08
  • 1970-01-01
相关资源
最近更新 更多