2016-02-07 2 views
0

У меня есть следующий код:Perl WWW :: Механизируйте вопрос кодирования

my ($url) = "http://example.com" 
my $m = WWW::Mechanize->new(); 
$m->get($url); 
my $c = $m->content; 
my $tree = HTML::TreeBuilder::XPath->new_from_content($c); 

if (my $content = $tree->look_down(_tag => "div", class => "content")) { 
    $content = $content->as_text(); 
} 

Вопрос в том, когда я анализирую содержание, часть текста имеет одинарные или двойные кавычки, которые не получают проанализированные правильно. Например, “this” становится “thisâ€.

Это мое понимание, что это некоторая Windows-1252 кодировка. Как я могу это исправить?

Я попытался добавить binmode STDOUT, ':encoding(utf-8)'; в начале программы, это не помогло.

Я пробовал добавить $content = utf8::decode($content);, но это не помогло.

ответ

2

Использование

$m->decoded_content; 

вместо

$m->content; 
+0

Я получаю эту ошибку: 'Не удается найти метод объекта "decoded_content" с помощью пакета "WWW :: Mechanize" в script.pl линии 75 . – KingsInnerSoul

+0

Я понял, что мне не хватает 'WWW :: Mechanize :: DecodedContent'. Как только это было исправлено, код работал. Но я все еще получаю ту же проблему. Для другого примера я получаю 'eâ € |' вместо' ... ' – KingsInnerSoul

+0

ОК, мне пришлось модифицировать ваш ответ на:' $ m-> decoded_content (charset => 'utf8'); ' – KingsInnerSoul

Смежные вопросы