LINUX.ORG.RU

perl CGI Pg perl_mod2... кодировка


0

0

Написал небольшой скрипт на perl, который через CGI генерит html,
везде использовал кодировку utf8 (CGI::charset('utf8'), текстовый редактор с поддержкой unicode, в базе данных тоже unicode ru_RU),
но возникла неожиданная проблема: создаю массив
my @status_enum = ('новая', «выполнена», 'в работе', «не выполнена», 'отложена', 'отменена', 'возобновлена', 'проверена', 'просрочена' );

при генерации странички буквы «ы» заменяются на знаки вопроса в черной рамочке, думаю что неверно кодировку распознал perl, делаю для массива
utf8::decode($_) foreach @status_enum;
на всей странице где есть русский язык появляются страшные крокозябры (ощушение, что все строки дополнительно перевели еще раз в unicode...), а массив с которым произвел decode выводится номально...
Если подключаю модуль utf8 (use utf8), то все строки которые есть в скрипте выводятся нормально, но все данне из сервера postgres в крокозябрах... отключаю utf8 конвертирование в $dbh->{pg_enable_utf8} = 0, ничего не меняется... вообщем что только не делал, не получается чтоб нормально страница создавалась.
Что я делаю не так?


> my @status_enum = ('новая', «выполнена», 'в работе', «не выполнена», 'отложена', 'отменена', 'возобновлена', 'проверена', 'просрочена' );

Прости, но ССЗБ. Нечего делать национальным символам в коде. Для этого шаблоны существуют.

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

С чего бы вдруг? Для этого use utf8; и существует.

Топикстартеру:
Через что ты выводишь? Пример кода можно?

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

в функции sub handler() {
my $q = CGI::new;
...
print $qook->header(-charset=>'utf-8' ).
$q->start_html(-encoding => 'UTF-8',
...
...
...
$q->div({-id=>'all_current_worklist'},
$q->div( $q->textfield( -id=>'hidden_name_list', -name=>'name_list', -value=>get_work_list_title($qook, getCGIParam('id_list') )) ),
$q->div( $q->textfield( -id=>'hidden_id_list', -name=>'id_list', -value=>getCGIParam('id_list') )),
$q->div( $q->textfield( -id=>'hidden_input', -name=>'input_field')),
$q->div( $q->popup_menu(-id=>'hidden_status_enum', -name=>'status_enum', -values=>\@status_enum , -default=>") ),
....

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

на всей странице где есть русский язык появляются страшные крокозябры (ощушение, что все строки дополнительно перевели еще раз в unicode...), а массив с которым произвел decode выводится номально...

w0rst
() автор топика

CGI.pm уже отслужил, CGI.pm может уйти.

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

meh. ты выборку из базы как выводишь? принтом?
Ну и оратор выше прав. На FCGI, Template::Toolkit и DBIx::Class было б и быстрее и проще. Впрочем, с базой можно и прямо из темплейтов работать, хоть это и не комильфо.

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

Победил добавлением (все таки) в начало модуля use utf8 и
при установкой флага $dbh->{pg_enable_utf8} = 1 ...
И при выборке из базы выбиралось поле которое было типом enum, я так понял что драйвер его не преобразовывал в utf, пришлось приведение типов к тексту сделать и все заработало.
Спасибо всем за помощь, обязательно посмотрю в сторону
Template::Toolkit, DBIx::Class.

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