【发布时间】:2011-12-28 21:02:31
【问题描述】:
请注意这个问题随着时间的推移而演变,因为我逐渐发现解决它的最佳方法是什么。所以现在它是一个解决方案而不是一个问题:-)。
工作流程
- 我获取html页面
- 我存储它(磁盘上的文件)
- 稍后我检索它来解析它
- 以防万一,我使用 TagSoup 来解决问题
- 我将数据解析为 HTML
请注意我说的是html页面,所以编码信息存在于标题中(在元标记中)。
每一步都是问题所在,因为在其中任何一步我都可能犯错。所以问题是如何获取数据、存储数据、检索数据并最终解析它(正确地——即在每一步都保留编码)?
【问题讨论】:
-
您可能想尝试getContentEncoding(),并尝试将值保留在文件中(可能在xml标头标签中)或使用writeTo(..)直接写入文件,如当您在流顶部使用阅读器时,它将避免对内容进行编码/解码。
-
数据已经有这样的header——是普通的html文件。我猜数据以字节形式出现,然后它们被解释为字符。我已经在 Jakarta HttpClient 页面上发现了一些关于它的讨论,但这不适用于 Apache HttpClient(而且很难使用 google,因为这两者经常混合使用)。
-
我认为正确的策略取决于您存储和重新阅读网页的原因。如果您充当代理,最安全的做法是写入和读取未解释的字节流,但我得到的印象不是您想要做的。也许你可以详细说明?
-
老实说,您存储数据的方式会故意改变,这很奇怪。就我而言,它正在缓存数据(实时数据有过期时间),而不是代理。我这样说——我需要以这种方式存储数据,那个简单的测试——使用浏览器——将给出与加载在线页面完全相同的输出。另一种方式,我的数据和那些通过网络浏览器“保存页面(仅限 html)”存储的数据应该是相同的。
标签: java html parsing scala encoding