这可能是错的:我收到错误消息
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
应该在例行程序中进行转换。
答案 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
字符串化。