Как использовать Unicode с Live для веб-скребков

Я пытаюсь очистить несколько сайтов, которые требуют поддержки 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.

2 ответа

Решение

У Enlive есть поддержка юникода, потому что он использует строки Java. Я запустил ваш первый пример на своем компьютере и получил такой результат:

(Evliyā Çelebi's Book of Travels)

Возможно, используемый вами шрифт не имеет глифов для кодов точек, которые вы пытаетесь показать?

Кристофу Гранду, автору живого писателя, было достаточно, чтобы ответить в почтовой группе Enlive. Его предложение было довольно информативным. Я скопировал письмо ниже:

Привет,

Enlive не является (и не включает) полнофункциональным агентом HTTP. Когда вы передаете java.net.URL в html-ресурс, он вызывает для него.getContent, получает 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-ресурс.

НТН,

Christophe

Другие вопросы по тегам