如何使用正确的编码存储和检索HTML?

时间:2011-11-14 17:50:28

标签: java html parsing scala encoding

请注意这个问题是否会及时发展,因为我逐渐找到了解决问题的最佳方法。所以现在它是一个解决方案而不是一个问题: - )。

工作流程

  • 我获取html页面
  • 我存储它(文件在磁盘上)
  • 稍后我检索它来解析它
  • 以防万一,我使用TagSoup来解决问题
  • 我将数据解析为HTML

请注意我在谈论html页面,因此编码信息出现在标题中(在元标记中)。

每个步骤都是问题,因为在任何一个步骤中我都会犯错误。所以问题是如何获取数据,存储数据,检索它并最终解析它(正确地 - 即在每一步保留编码)?

1 个答案:

答案 0 :(得分:1)

保存

我发现将数据保存和加载为二进制更安全,尽管它是文本。这样我就避免了编码问题 - 所以除了解析器我只使用Array [Byte]。

org.apache.commons.io.FileUtils
  .writeByteArrayToFile(new File(filename),content)

检索&解析

G_H指出JSoup库能够自行检测编码 - 所有人必须做的就是 NOT 来传递编码信息。

val data = org.apache.commons.io.FileUtils
             .readFileToByteArray(new File(filename))
val doc = org.jsoup.Jsoup.parse(new java.io
             .ByteArrayInputStream(data), null,"");

撷取

var content : Array[Byte] = null
val client = new org.apache.http.impl.client.DefaultHttpClient();
val httpget = new org.apache.http.client.methods.HttpGet(url);

try {
  val response = client.execute(httpget);
  val entity = response.getEntity()
  content = org.apache.http.util.EntityUtils.toByteArray(entity)

}
finally {
  client.getConnectionManager().shutdown();
}

非常感谢G_H,JSoup是一个转折点。