Проблема с кодировкой Perl WWW::Mechanize

У меня есть следующий код:

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);, но это не помогло.


person KingsInnerSoul    schedule 07.02.2016    source источник


Ответы (1)


Использовать

$m->decoded_content;

вместо

$m->content;
person cjm    schedule 07.02.2016
comment
Я получаю эту ошибку: Can't locate object method "decoded_content" via package "WWW::Mechanize" at script.pl line 75. - person KingsInnerSoul; 07.02.2016
comment
Я понял, мне не хватало WWW::Mechanize::DecodedContent. Как только это было исправлено, код заработал. Но я все еще получаю ту же проблему. В другом примере я получаю e… вместо ... - person KingsInnerSoul; 07.02.2016
comment
Хорошо, мне пришлось изменить ваш ответ на: $m->decoded_content(charset => 'utf8'); - person KingsInnerSoul; 07.02.2016
comment
Похоже, веб-сайт, который вы пытаетесь очистить, неправильно сообщает набор символов, который он использует. - person cjm; 07.02.2016
comment
Ну, я проверил это на StackOverflow, и это тот же результат. stackoverflow.com/questions/35279605/ . За “..libQtCore.so.4” я получаю “..libQtCore.so.4†- person KingsInnerSoul; 09.02.2016