Perl的Encode.pm不能解码字符串宽字符(Perl Encode.pm cannot dec

2019-08-01 17:22发布

我跑,它使用一个perl程序/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无法解码字符串宽字符。

174线Encode.pm

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;
}

任何解决方法吗?

Answer 1:

我有一个类似的问题。 $enc->decode( $octets, $check ); 预计字节。

所以把Encode::_utf8_off($octets)前。 它使人们对我的工作。



Answer 2:

encode需要的Unicode代码点的串,并将它们串行化成字节的字符串。

decode采用字节的字符串,并将其deserialises成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.

你问到我一个解决办法,但这个错误是你的。 也许你不小心尝试解码你已经解码的东西吗?



Answer 3:

该错误信息是说,你已经被解码(并包含上文码点255个字符)的字符串已经过去了。 你不能再对其进行解码。



文章来源: Perl Encode.pm cannot decode string with wide character