ここで何が間違っている可能性があります:エラーメッセージが表示されます
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は2Unicode :: 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
)。