shoorick: (Default)
[personal profile] shoorick
Пытаюсь воткнуть свежезарелизенное в один из наших проектов. С одной стороны, конечно, надо придерживаться правила «Не сломалось — не чини», но, с другой, если модуль выложен на CPAN и, следовательно, уже не сильно связан с исходным проектом — нет смысла держать дубль. Пока натыкаюсь на ошибки:
Malformed UTF-8 character (unexpected continuation byte 0x80, with no preceding start byte) in pattern match (m//) at /usr/local/lib/perl5/site_perl/5.8.9/Lingua/RU/Inflect.pm line 254.
[error] Caught exception in engine "Wide character in memGzip at /usr/local/lib/perl5/site_perl/5.8.9/Catalyst/Plugin/Compress/Gzip.pm line 36"
Попробовал добавить в проблемный участок вызовы функций encode и decode:
my @name = Lingua::RU::Inflect::inflect_given_name(
    GENITIVE,
    decode('utf8', $student->user_id->lname),
    decode('utf8', $student->user_id->fname),
    decode('utf8', $student->user_id->sname),
);

push @name, shift @name; # ФИО → ИОФ
$c->stash->{'student_genitive'} = encode('utf8', join(' ', @name));
Вроде, заработало, но выглядит паршиво.

Надо бы perlunicode перечитать...

Date: 2010-02-24 03:55 pm (UTC)
ext_659893: Sapa (Default)
From: [identity profile] sappa.livejournal.com
Паршиво имеет место быть где-то ранее в программе. Потому как $student->user_id->lname и иже с ним содержат байтовые, а не символьные строки. Хоть они и в UTF-8 кодировке, но перл об этом не знает и они трактуются именно как строка октетов.

Вставь код:

use Devel::Peek;
Dump($student->user_id->lname);


и посмотри присутствует ли UTF8 во флагах. Да, по-хорошему все текстовые строки должны быть перекодированы во внутреннее представление сразу по поступлении извне (из файла, сокета, СУБД, ...). Не перекодированными должны оставаться только массивы двоичных данных. Откуда у тебя поступают данные для $student->user_id->[lfs]name ?

Откуда поступают

Date: 2010-02-25 06:59 am (UTC)
From: [identity profile] shoorick.livejournal.com
Из БД. Причём с использованием ORM
DBIx::Class.

Profile

shoorick: (Default)
shoorick

December 2016

S M T W T F S
    1 23
45678910
11121314151617
18 19 2021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 21st, 2026 06:12 am
Powered by Dreamwidth Studios