/ / Unicode :: GCStringエラーメッセージ: "新しい:Unicode文字列を指定する必要があります" - perl、unicode

Unicode :: GCStringエラーメッセージ: "新しい:Unicode文字列を指定する必要があります" - 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 ルーチン内でシフトされるべきである。

回答:

回答№1は2

Unicode :: GCStringは、Unicodeのバグに苦しんでいます(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それは文字列をデコードするのを忘れていた兆候かもしれません。


回答№2の場合は1

私は設定を忘れた use utf8 (私は明示的にストリングする必要があった $gstring->as_string)。