вторник, августа 04, 2009

Perl и преобразование регистра

Недавно хорошо промучился с преобразованием регистра в Perl. Дело в том,что Perl и Юникод не на короткой ноге, поэтому простым путём lc() ничего сразу не получится. Вот как следует преобразовывать в нижний регистр строку с Юникод-терминала:

#!/usr/bin/perl -w
use strict;
use Encode;
chomp(my $input = <STDIN>);
my $string = decode("UTF-8",$input);
$string = lc($string);
print encode("UTF-8",$string);

Я был удивлён,что совершенно не требуется прагма use locale. Наоборот, при её использовании всё только ухудшается.Также существуют функции decode_utf8 и encode_utf8, которые принимают только один параметр; работают аналогично.Юникод - двухбайтовая кодировка, и требует подобного обращения при любом использовании. В конце хочу добавить,что замечание интерпретатора "Wide character in print at ..." сигнализирует о том,что вы забыли закодировать строку обратно в UTF-8, и выводите её на экран во внутренней кодировке (попробуйте заменить последнюю строку на обычный print $string).

Комментариев нет:

Отправить комментарий

Постоянные читатели

Архив