Я пишу скрипт Perl, который извлекает различные HTML-документы со многих разных веб-сайтов и пытается извлечь данные из них. У меня проблема с расшифровкой этих документов.Какая кодировка Perl, для которой установлен набор символов HTML?
Я знаю, как читать charset
из метатега, если таковой существует, и как читать эту информацию из HTTP-заголовка, если он доступен.
Результаты могут быть:
- UTF-8
- ISO-8859-1
- Shift_JIS
- Окна-1252
и многое другое
С это знание Я хочу, чтобы декодировать документ в моем скрипте на Perl
#!/usr/bin/perl -w
use strict;
use LWP::UserAgent;
use Encode;
use Encode::JP;
# Maybe also use other extensions for Encode
my $ua = LWP::UserAgent->new;
my $response = $ua->get($url); #$url is the documents URL
if ($response->is_success) {
my $charset = getcharset($response);
# getcharset is a self-written subroutine that reads the charset
# from a meta tag or from the HTTP header (not shown in this example)
# Now I know the documents charset and want to find its encoding:
my $encoding = 'utf-8'; # default
if ($charset eq 'utf-8') {
$encoding = 'utf-8'; # Here $encoding and $charset are equal
}
elsif ($charset eq 'Shift_JIS') {
$encoding = 'shiftjis'; #here $encoding and $charset are not equal
}
elsif ($charset eq 'windows-1252') {
# Here I have no idea what $encoding should be, since there is no
# encoding in the documentation that contains the string "windows"
}
elsif ($charset eq 'any other character set') {
$encoding = ???
}
my $content = decode($encoding, $result->content);
# Extract data from $content
}
Но я не могу найти правильные кодировки для некоторых кодировок, которые существуют там в дикой природе.
Вы должны «использовать предупреждения», предпочитая '-w' на линии shebang – Borodin