У меня есть этот скрипт. Somefile.xsd - это файл, содержащий несколько символов UTF-8. Однако я обнаружил, что не могу получить guess_encoding
, чтобы сообщить ту же кодировку, что и Encode :: Guess-> guess. Игнорируя факт, что это XSD, какая очевидная вещь (и я уверен, что это, вероятно, очевидно), я пропустил, что я еще не сделал?Encode :: Guess-> guess дает разные результаты для guess_encoding
use Encode;
use Encode::Guess;
open (FILE, "<", "somefile.xsd");
print ("Reading file...\n");
#$text = <FILE>;
while ($text = <FILE>) {
$encoding1 = Encode::Guess->guess($text);
if (ref($encoding1)) {
$name = $encoding1->name;
print "$name : $text" if ($name ne "ascii");
} else {
print ("Not found : $text");
}
$encoding2 = guess_encoding($text, qw/iso-8859-15 ascii iso-8859-1 utf8/);
if (ref($encoding2)) {
$name = $encoding2->name;
print "$name : $text" if ($name ne "ascii");
} else {
print ("Not found : $text");
}
}
close(FILE);
Когда я запускаю это, он дает следующие результаты:
H:\play>perl encoding.pl
Reading file...
utf8 : <xs:enumeration value="Bokmål, Norwegian; Norwegian Bokmål"/>
Not found : <xs:enumeration value="Bokmål, Norwegian; Norwegian Bokmål"/>
utf8 : <xs:enumeration value="Occitan (post 1500); Provenæ ¬"/>
Not found : <xs:enumeration value="Occitan (post 1500); Provenæ ¬"/>
utf8 : <xs:enumeration value="Volapük"/>
Not found : <xs:enumeration value="Volapük"/>
Edited уточнить: Я хочу использовать версию guess_encoding
со вторым вариантом (т.е. список подозреваемых) , Удаление списка не дает мне ничего, кроме звонка Encode::Guess->guess
. Вариант использования заключается в том, что я хочу проверить, что файл соответствует одному из наборов кодировок, а передача действительного списка выглядит более элегантно, чем называть угадать и смотреть имя в списке, особенно когда у меня было $encoding->name
. результат iso-8859-15 or utf8
, что означает, что я не могу просто проверить равенство против списка.
Так почему же guess_encoding терпят неудачу? Документы говорят, что второй параметр - это список подозреваемых, которые будут проверены. Я перечисляю UTF-8, кодировка UTF-8, что мне не хватает? Весь смысл предоставления списка подозреваемых заключается в том, что вам не нужно проверять каждого подозреваемого. В моем случае я хочу ограничить список, поскольку мне нужны только специальные кодировки, так как я хочу обрабатывать остальные как условие ошибки - предоставление подозрительного списка кажется более элегантным, чем проверка возвращаемой строки. –