Unicode :: GCString сообщение об ошибке: «new: должна быть задана строка Unicode» - PullRequest
0 голосов
/ 22 февраля 2012

Что здесь может быть не так: я получаю сообщение об ошибке
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 ]

2 голосов
/ 22 февраля 2012

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, но это также может быть признаком того, что вы забыли декодировать строку.

1 голос
/ 22 февраля 2012

Я забыл установить use utf8 (и мне пришлось явным образом преобразовать $gstring->as_string).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...