Есть скрипт на перле, который берет из базы значение в cp1251, а затем должен сделатьsystem("mkdir reports/$string")
Вот только на FreeBSD и на Linux cp1251 распознается вопросиками(или всякими /399/411) и не создают нормально папки. Я пробовал что-то вида:
$res_string=`system("iconv -f cp1251 -t utf-8 $string")
для преобразования кодировок, но это тоже мало помогло. Есть ли какой-нибудь другой способ оперирования кодировками в perl? Либо другой вариант решения?
Еще мне понадобится создавать файл с содержимым из базы, так что придется научиться преобразовывать кодировку из Perl.
О почему собственно ?
>
>$res_string=`system("iconv -f cp1251 -t utf-8 $string")
>Здесь нужно
$res_string=`system("echo $string|iconv -f cp1251 -t utf-8");
Спасибо, действительно получилось. Но почему-то при таком:
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Астанина Мария Александровна
Ладно, отрезал регуляркой.
Еще такой вариант:
use Encode;
$content = decode('utf8', $content);
в данном случае декодирование $content из utf8 во внутреннее представление, т.е. в cp1251 например, если сам скрипт в cp1251. Есть там и обратная функция encode соответственно.
Почитайте доку по модулю Encode.
Судя по всему локаль у тебя юникодная, ну так и выбирай из базы сразу в utf8. Смотри мануал к мускулу на предмет SET NAMES