LINUX.ORG.RU

Что за ужасы с перлом?


0

0

Полез тут исправлять один древний код и нарвался на такую бяку:

$q="SELECT * FROM `from_web` WHERE `from`='$nick'"; my $sth = $cdbh->prepare($q); $sth->execute; while(my $row = $sth->fetchrow_hashref) { my $msg="$$row{message} ($$row{web_num},$time)"; ... print $msg print "Тест: $msg" ...

Так вот, первый print выводит корректно строку на русском.

Во втором - "Тест" написано по-русски, а за ним - кракозябры вида "дльÐ& ;#187;Ð". Т.е. как UTF-8 выданный в голом ASCII.

Локаль системы и mysql в utf8. Пробовал врубать и "use utf8;" и setlocale, и вместе и поочереди...

Я так понимаю, что с некоторых пор Perl стал в строках хранить непосредственно их кодировку, что ли?

Но как с этим бороться в моём случае?? Переходом на PHP, что ли? :D Так под PHP нет Net::Jabber (для работы с которым скрипты и используются)

★★★★★

Иммать...

$q="SELECT * FROM `from_web` WHERE `from`='$nick'";
my $sth = $cdbh->prepare($q);
$sth->execute;
while(my $row = $sth->fetchrow_hashref)
{
    my $msg="$$row{message} ($$row{web_num},$time)";
...
    print $msg
    print "Тест: $msg"
...

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

Да, склеивать скроки пробовал, естественно, и вставкой внутрь строки, как примером, и точкой... пофиг!

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

попробуй-ка поколдовать с:

use Encode;

и либо Encode::_utf8_off($myvariable);
либо Encode::_utf8_on($myvariable);

что-то из этих двух может помочь =))

vahvarh ★★★
()

Если кодировка страницы и браузера не совпадает, то браузер передает не-ascii символы в utf8-кодах. Так что ни код, ни mysql тут не причем.
преобразовать коды в символы можно через unpack + pack

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

>Если кодировка страницы и браузера не совпадает, то браузер передает не-ascii символы в utf8-кодах. Так что ни код, ни mysql тут не причем.

В том-то и прикол, что система _вся_ в utf8 (дефолтовая локаль, mysql). Кстати, это не web-серверный скрипт, а самопальный демон для связи БД и Jabber'а. Естественно, Jabber - весь utf8 по дефолту. Но до него дело и не доходит :) ... впрочем, Апач у меня тоже по дефолту в utf8 :)

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от vahvarh

>Encode::_utf8_on($myvariable);

Помогло. Спасибо.

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