URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8381
[ Назад ]

Исходное сообщение
"Оперирование кодировками Perl"

Отправлено SubGun , 05-Авг-09 10:46 
Есть скрипт на перле, который берет из базы значение в cp1251, а затем должен сделать

system("mkdir reports/$string")

Вот только на FreeBSD и на Linux cp1251 распознается вопросиками(или всякими /399/411) и не создают нормально папки. Я пробовал что-то вида:

$res_string=`system("iconv -f cp1251 -t utf-8 $string")

для преобразования кодировок, но это тоже мало помогло. Есть ли какой-нибудь другой способ оперирования кодировками в perl? Либо другой вариант решения?
Еще мне понадобится создавать файл с содержимым из базы, так что придется научиться преобразовывать кодировку из Perl.


Содержание

Сообщения в этом обсуждении
"Оперирование кодировками Perl"
Отправлено di , 05-Авг-09 11:23 
О почему собственно ?
>
>$res_string=`system("iconv -f cp1251 -t utf-8 $string")
>

Здесь нужно

$res_string=`system("echo $string|iconv -f cp1251 -t utf-8");



"Оперирование кодировками Perl"
Отправлено SubGun , 05-Авг-09 12:06 
Спасибо, действительно получилось. Но почему-то при таком:

my $stu = $dbh->prepare(qq{SELECT name FROM users WHERE gid='$squid_gid'});
$stu->execute();
while (my ($squid_name) = $stu->fetchrow_array()) {
       $res_string = system("echo $squid_name | iconv -f cp1251 -t utf8");
       print " $res_string";
                                                  }

перед результатом возникает гадкий "0":

0Просветова Светлана Дмитриевна
0Кузнецова Галина Федоровна
0Карпышева Елена Юрьевна
0Чайка Елена Сергеевна
0Маланьина Екатерина Николаевна
0Буклова Елена Александровна
0Астанина Мария Александровна


"Оперирование кодировками Perl"
Отправлено SubGun , 05-Авг-09 12:35 
Ладно, отрезал регуляркой.

"Оперирование кодировками Perl"
Отправлено Аноним , 05-Авг-09 12:21 
Еще такой вариант:
use Encode;
$content = decode('utf8', $content);
в данном случае декодирование $content из utf8 во внутреннее представление, т.е. в cp1251 например, если сам скрипт в cp1251. Есть там и обратная функция encode соответственно.
Почитайте доку по модулю Encode.

"Оперирование кодировками Perl"
Отправлено angra , 05-Авг-09 17:40 
Судя по всему локаль у тебя юникодная, ну так и выбирай из базы сразу в utf8. Смотри мануал к мускулу на предмет SET NAMES