Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > mysql utf8 и regexp


Автор: wpp 18.5.2006, 21:35
Что-бы не говорили 
Код

set names utf8

Код

Variable_name    Value
character_set_client    utf8
character_set_connection    utf8
character_set_database    utf8
character_set_results    utf8
character_set_server    utf8
character_set_system    utf8
character_sets_dir    /usr/share/mysql/charsets/


В скрипте
Код

use encoding "utf-8";
...
while (my $h = $sth->fetchrow_hashref){
   $h->{'tag'} =~ m/^(\p{L}{1})/;
   warn $1;
   warn length $h->{'tag'};
...



Не видит русских букв, length показывает удвоенную длину русских слов. В таблице строки действительно в utf8. Я что-то не сделал? Вроде бы всегда так делал и все работало smile 

Автор: korob2001 18.5.2006, 22:48
Попробуй так, по крайней мере я всегда пользуюсь этим модулем, для подобного конвертирования:
Код
use Text::Iconv;
my $enc = Text::Iconv->new("UTF-8","WINDOWS-1251");
...
while (my $h = $sth->fetchrow_hashref) {
   $enc->convert($h->{'tag'}) =~ m/^(\p{L}{1})/;
   warn $1;
   warn length $h->{'tag'};
...
  

Автор: nitr 18.5.2006, 23:18
perldoc Encode - великолепный модуль для работы с кодировками, мспользуй методы encode и decode! 

Автор: sharq 19.5.2006, 09:32
wpp
Цитата(wpp @  18.5.2006,  22:35 Найти цитируемый пост)
length показывает удвоенную длину русских слов

нужно length использовать так:
Код

my $length = do{use bytes; length($str)};


Плюс почитай
Цитата

perldoc perluniintro
perldoc perlunicode


 smile  

Автор: wpp 19.5.2006, 10:30
nitrkorob2001, Мне не надо конвертировать. В таблице строки в юникоде и конвертировать их не надо . Даже не понимаю, почему Вы решили, что мне надо строку конвертировать.


sharqbytes - Perl pragma to force byte semantics rather than character semantics Каким боком это приплелось? Мне нужна длина строки в символах, а не в байтах.
Цитата

Плюс почитай
Цитата

perldoc perluniintro
perldoc perlunicode


Советую  Вам поступить в соответсвии с Вашим советом. 

Автор: sharq 19.5.2006, 15:44
wpp
Цитата(wpp @  19.5.2006,  11:30 Найти цитируемый пост)
Советую  Вам поступить в соответсвии с Вашим советом.  

Спасибо! Знаком.  smile 

Давайте вместе прочитаем предложенные руководства
 smile 
Цитата

perldoc perluniintro
perldoc perlunicode


Цитата

perdoc -f length


Я, надеюсь, ты понимаешь, почему в два раза больше?

 smile   

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)