LINUX.ORG.RU

UTF8 в perl - обработка строк.


0

0

Что-то я не пойму каким образом мне включить поддержку utf8 в функции lc и uc. Поставилв начале:

use utf8;
use locale;
use POSIX qw (locale_h);
setlocale(LC_CTYPE, 'en_US.UTF-8');

далее в тексте:

my $uckw = uc($kw);
$dbh->do('insert into t1 (kw) values (?)', undef, $uckw);
$idkw = $dbh->{'mysql_insertid'};

uc не срабатывает. В таблицу помещается оригинальная строка в кодировке UTF8. :(((
Дайте пожалуста наводку - куда копать.

Я проверяю это на русском тексте. Но в пирнципе, текст может быть на любом языке. Может быть в этом дело?

Ответ на: комментарий от UncleAndy

UTF8 в perl - обработка строк. - Подробности

sub utf8uc
{
my $bcs = $_[0]
my $test = uc('TEST: Проверка UtF8');
`echo "$test" >> /tmp/f.log`;
`echo "STR BEFORE UC = $bcs" >> /tmp/f.log`;
my $ucs = uc($bcs);
`echo "STR AFTER UC = $ucs" >> /tmp/f.log`;
}

В логе (смотрю через kate в кодировке utf8):
TEST: ПРОВЕРКА UTF8
STR BEFORE UC = тест
STR AFTER UC = тест

Что за фигня? :(((

UncleAndy ★★★
() автор топика

#!/usr/bin/perl -w
                                                                                
use utf8;
                                                                                
my $a = "Привет & Hello";
                                                                                
print "$a\n\L$a\E\n\U$a\E\n";

====

$ perl test.pl
Привет & Hello
привет & hello
ПРИВЕТ & HELLO
$ 

                                                                                

anonymous
()
Ответ на: комментарий от anonymous

Дело оказалось немного в другом. Оказывается perl не видит, что в переменной текст в utf8 если этот текст явно не береться из текстовой константы в скрипте. Т.е. если он берется, например, из stdin perl просто так не понимает, что это utf8. Вылечилось вызовом метода Encode::_utf8_on($s). После этого и uc и lc с $s отлично работают. :)

UncleAndy ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.