Unicode :: GCString错误消息:“new:必须给出Unicode字符串”

时间:2012-02-22 07:44:25

标签: perl unicode

这可能是错的:我收到错误消息
new: Unicode string must be given at ...
对于线路 $gvalue = Unicode::GCString->new( $value );

use Unicode::GCString;

# ....
# ....

my $width = 0;
my $gvalue;

if ( $value ) {
    $gvalue = Unicode::GCString->new( $value );
    $width = $gvalue->columns();
}

# ....
# new: Unicode string must be given. at ...

$values来自:

for my $i ( 0 .. $#$ref ) {
    for my $j ( 0 .. $#{$ref->[$i]} ) {
        my $value = $ref->[$i][$j] // '';
        # ...

到目前为止,虽然测试$ref在脚本中是硬编码的,但它应该成为一个模块,$ref应该在例行程序中进行转换。

2 个答案:

答案 0 :(得分:2)

Unicode :: GCString受到Unicode Bug的影响(赋予UTF8标志含义):

 $ perl -MUnicode::GCString -E'
    $_=chr(0xE9);
    utf8::downgrade($_);
    Unicode::GCString->new($_);
    say "ok";
 '
 new: Unicode string must be given. at -e line 4.

 $ perl -MUnicode::GCString -E'
    $_=chr(0xE9);
    utf8::upgrade($_);
    Unicode::GCString->new($_);
    say "ok";
 '
 ok

它期望使用UTF8 = 1内部存储格式存储字符串。您可以使用utf8::upgrade将字符串强制为正确的格式,但它也可能表示您忘记解码字符串。

答案 1 :(得分:1)

我忘了设置use utf8(我必须明确地将其$gstring->as_string字符串化。