【问题标题】:Stop Jsoup from encoding停止 Jsoup 编码
【发布时间】:2011-06-08 12:59:19
【问题描述】:

我正在尝试使用 JSoup 解析包含以下文本的 URL:Ætterni。 解析文档后,相同的字符串如下所示:Ætterni

如何防止这种形式发生?我希望文档 1:1 完全一样。

代码:

doc = Jsoup.connect(url).get();
String docEncoding=doc.outputSettings().charset().name();
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(localLink),docEncoding);
writer.write(doc.html());
writer.close();

【问题讨论】:

    标签: java jsoup


    【解决方案1】:

    使用 doc.outputSettings().escapeMode(EscapeMode.xhtml); 避免实体转换。

    【讨论】:

      【解决方案2】:

      你似乎没有以任何方式利用 Jsoup 的力量。我只是使用java.net.URL 流式传输 HTML 纯文本。这样您就有了响应的 1:1 副本。

      InputStream input = new URL(url).openStream();
      OutputStream output = new FileOutputStream(localLink);
      // Now copy input to output the usual Java IO way.
      

      您应该为此使用Reader/Writer,因为这可能会使未知编码的来源的字符变形,因为将使用平台默认编码。

      【讨论】:

      • 我将 Jsoup 用于存储网站的应用程序,因此我经常使用 Jsoup 的功能,但像 600 LoC :o 这样的帖子没有意义。我只是简化了我的问题。那么我可以将 OutputStreams 与 Josup 一起使用吗?
      • 那么,您是在使用 Jsoup 遍历和操作 HTML 吗?你说过你想要一个 1:1 的副本。我最初预计您使用 Jsoup 只是为了计算字符集,因为您错误地使用了 Writer 来保存内容。好吧,你不能阻止它对特殊字符进行编码。当 Jsoup 这样做时,你到底有什么问题?顺便说一句,Jsoup 几乎从不给html() 1:1 的副本,因为它默认添加/清理一些标签以使其成为有效的 HTML 和格式良好的 XML。
      • 是的,我完全重写了 HTML,以便可以在本地文件系统中使用它。我遇到的问题是它以不再被识别为 url 的方式操纵特殊字符。例如,它将 URL /Mitglieder/Höttur.jpg 更改为 /Mitglieder/H & o u m l ; ttur.jpg(添加空格)。我无法检索更改的网址,因为它不再有效..
      • 据我所知,Jsoup 不支持。您可能想在github.com/jhy/jsoup/issues 发布功能请求。编辑:它正在为链接 URL 做这件事对我来说似乎是一个错误。您愿意这样举报。
      • 好的,感谢您的宝贵时间和反馈。我将不得不编写一个自定义函数,然后将网址恢复正常。我也会举报的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-29
      • 2017-07-12
      • 1970-01-01
      • 2018-07-13
      • 1970-01-01
      • 2018-07-26
      • 2022-01-13
      相关资源
      最近更新 更多