LINUX.ORG.RU

Perl и UTF8

 ,


0

1

Mechanize'ом делаю запросы на страницу.
Результат (html) сохраняю в переменной: $content = $mech->content();
Делаю print $content; - неправильная кодировка (utf8, символы вида л).
Создаю HTML::TreeBuilder, делаю $tree->parse($content), затем print $tree->dump; - и с кодировкой все становится отлично.

Как побороть без TreeBuiler'а?

binmode(STDOUT, ":utf8") и use utf8 не помогают.

★★★★★

use encoding 'UTF-8';

use open IO => ':utf8';

use utf8;

anonymous
()
Ответ на: комментарий от outtaspace

is_utf8 ничего не возвращает (но defined, видимо, не utf8).

use encoding 'UTF-8';

эта вообще все поломала)

kovrik ★★★★★
() автор топика
Ответ на: комментарий от Bad_ptr

У меня в другом скрипте тоже так прописано + use utf8 - там все работает. А тут почему-то нет)

kovrik ★★★★★
() автор топика

Попробуй указывай нужную тебе кодировку в голове пакета. Надеюсь, ничего не путаю.

anonymous
()

Может, попробовать с параметром -C Perl запустить, вдруг поможет? Или уже запустил и не помогает?

proud_anon ★★★★★
()
Ответ на: комментарий от kovrik

Поиграйся с утф-флагом. Подними его для ${content}.

use utf8;

use Encode qw( _utf8_on );

STDOUT->binmode(':utf8');

_utf8_on( $content );

print $content .«\n»;

outtaspace ★★★
()

Ссылку на страницу в тред!

Olegymous ★★★
()
use Encode;
my $conv = Encode::find_encoding('utf8');


$content = $mech->content();

unless (Encode::is_utf8($content) {
  $content = $conv->decode($content);
}

# $conv->encode($content);
# чистый unicode, раскомментируйте и перл будет ругатся на Wide characters, удобно для заливки куда-нить...

printf "%s\n", $content;
gh0stwizard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.