【发布时间】:2014-12-19 13:36:57
【问题描述】:
我有这个脚本。 Somefile.xsd 是一个包含几个 UTF-8 字符的文件。然而,我发现我无法让guess_encoding 报告与 Encode::Guess->guess 相同的编码。忽略它是 XSD 的事实,我错过了什么明显的事情(我相信这可能很明显)我还没有做过?
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"/>
编辑澄清:我想使用带有第二个选项的guess_encoding 版本(即嫌疑人列表)。删除列表对我来说只是调用Encode::Guess->guess。用例是我想检查一个文件是否与一组编码中的一个匹配,并且传递有效列表似乎比调用guess 并在列表中查找名称更优雅,特别是当我有$encoding->name give我是iso-8859-15 or utf8 的结果,这意味着我不能简单地检查列表是否相等。
【问题讨论】: