LINUX.ORG.RU

Проблемы с кодировок в PERL....


0

1

Пишу не большой сервис (сайтик), кодировка сайта koi8-r. По запросу от клиента скрипт на сервере (PERL, mod_perl) парсит XML документ, который тоже в koi8-r кодировке. С помощью библиотеки XML::Simple (XMLin). В результате этого процесса получаю ссылку на HASH.

Далее выполняю преобразование элементов HASH-a в кодировку koi8-r, т. к. после парсинга XML результат возвращается в utf, библиотекой Encode.

Encode::_utf8_on($param->{Name}); $param->{Name} = Encode::encode('koi8-r',$param->{Name});

Дамп = { 'CName' => 'TX_SET__nemedlenno_peredavat', 'InputLevel' => '1', 'ObjectId' => 10001, 'ValueAlias' => '\'выкл;вкл\", 'DeviceId' => '103', 'ValueType' => '\'0;1\", 'ValueInput' => 'radio', 'Name' => 'Вкл. излучение', 'ShowLevel' => '1' };

До этого момента все гладко. Теперь я пытаюсь вставить данные в базу данных. Для это, через стандартную функцию PERL-a join пытаюсь построить запрос:

my $statement = «INSERT INTO ». $tbl . " (".(join(',',@cols)).") VALUES(".(join(',',@vals)).");";

Но в результате в переменной $statement вместо русского текста крокозябры:

INSERT INTO Params (CName,InputLevel,ObjectId,ValueAlias,DeviceId,ValueType,ValueInput,Name,ShowLevel) VALUES('TX_SET__nemedlenno_peredavat','1','10001','\'ц≈ц≥ц▀ц▄;ц≈ц▀ц▄\",'103','\'0;1\",'radio','ц╥ц▀ц▄. ц┴ц ц▄ц∙ц·ц┘ц▌ц┴ц┘','1');

Если не использовать функции join, то все работает. А мне нужно использовать такой метод генерации SQL запроса. В чем может быть причина такого поведения? Не как не пойму?



Последнее исправление: kozlodoev (всего исправлений: 1)

сначала join, затем encode ?

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