【发布时间】:2012-02-19 02:51:40
【问题描述】:
我不知道 perl,但我需要调试我正在使用的应用程序所需的 perl 脚本,这是我得到的错误:
Unable to recognise encoding of this document at /usr/lib/perl5/vendor_perl/5.8.8/XML/SAX/PurePerl/EncodingDetect.pm line 9
问题是,这个脚本无法弄清楚文件的编码是什么。我想知道的是,那是哪个文件。我无法找到堆栈跟踪的方法。这是稍微修整的脚本:
package XML::SAX::PurePerl; # NB, not ::EncodingDetect!
use strict;
sub encoding_detect {
my ($parser, $reader) = @_;
my $error = "Invalid byte sequence at start of file";
my $data = $reader->data;
if ($data =~ /^\x00\x00\xFE\xFF/) {
# BO-UCS4-be
$reader->move_along(4);
$reader->set_encoding('UCS-4BE');
return;
} .. tons of if else statements
warn("Unable to recognise encoding of this document");
return;
我检查过,但这个阅读器对象没有名称或路径属性。我可以控制这个脚本,所以我可以在必要时对其进行修改。任何帮助表示赞赏。
编辑:我已经找到了问题,直到我尝试使用的应用程序中的这一行:
my @array = SystemImager::HostRange::expand_groups($clients);
【问题讨论】:
-
该错误表明输入的 XML 文档未声明编码并且文件的前几个字节似乎不是 UTF-8 或 UTF-16。文件可能是空的吗?
-
我希望在解析器对象中而不是在阅读器中找到文件名。另一种方法可能是在代码中查看
parse_uri之类的内容。
标签: perl debugging encoding sax