我正在运行使用/opt/local/lib/perl5/5.12.4/darwin-thread-multi-2level/Encode.pm
并发出错误
无法在/opt/local/lib/perl5/5.12.4/darwin-thread-multi-2level/Encode.pm第174行解码带宽字符的字符串。
Encode.pm
的第174行读取
sub decode($$;$) {
my ( $name, $octets, $check ) = @_;
return undef unless defined $octets;
$octets .= '' if ref $octets;
$check ||= 0;
my $enc = find_encoding($name);
unless ( defined $enc ) {
require Carp;
Carp::croak("Unknown encoding '$name'");
}
my $string = $enc->decode( $octets, $check ); # line 174
$_[1] = $octets if $check and !ref $check and !( $check & LEAVE_SRC() );
return $string;
}
任何解决方法?
答案 0 :(得分:12)
encode
接受一串Unicode代码点并将它们串行化为一串字节。
decode
接受一串字节并将它们反序列化为Unicode代码点。
该消息表示您将包含一个或多个255以上字符(非字节)的字符串传递给decode
,这显然是一个不正确的参数。
>perl -MEncode -E"for (254..257) { say; decode('iso-8859-1', chr($_)); }"
254
255
256
Wide character in subroutine entry at .../Encode.pm line 176.
你要求一个解决方法,但错误是你的。也许你不小心试图解码已解码的东西?
答案 1 :(得分:7)
我有类似的问题。
$enc->decode( $octets, $check );
期待八位字节。
所以先放Encode::_utf8_off($octets)
。它使它对我有用。
答案 2 :(得分:2)
该错误消息表示您已传入已解码的字符串(并包含代码点255以上的字符)。你无法再解码它。