1

我正在尝试抓取一些需要 unicode 支持的网站。例如,我正在尝试获取这本书的标题,但它返回的字符混乱:

(-> "http://www.brill.nl/publications/evliya-celebis-book-travels" 
      java.net.URL. enlive/html-resource
 (enlive/select [:h1#page-title]) first :content)

并试图抓取一个阿拉伯语网站返回 ?????? 到处都是。

(enlive/html-resource (java.net.URL. "http://www.aljazeera.net/portal"))

我不确定我应该如何激活 unicode 支持。

4

2 回答 2

2

Enlive 确实支持 unicode,因为它使用 Java 字符串。我在我的计算机上运行了您的第一个示例并得到了以下结果:

(Evliyā Çelebi's Book of Travels)

也许您使用的字体没有您要显示的点代码的字形?

于 2012-05-17T19:13:03.537 回答
2

enlive 的作者 Christophe Grand在 Enlive 电子邮件群中回复了。他的建议非常有用。我已经复制了下面的电子邮件:

你好,

Enlive 不是(也不包括)功能齐全的 HTTP 代理。当您将 java.net.URL 传递给它调用 .getContent 的 html 资源时,获取一个 InputStream 然后假定为 UTF-8。但是,如果您知道实际编码,您可以执行以下操作:

(-> "http://www.brill.nl/publications/evliya-celebis-book-travels" java.net.URL.
  .getContent (java.io.InputStreamReader. "ENCODING GOES HERE")
enlive/html-resource
 (en/select [:h1#page-title]) first :content)

或者使用代理库来检测正确的编码并将生成的 Reader 传递给 html-resource。

h,

克里斯托夫

于 2012-05-20T11:00:34.290 回答