Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > JSON + база в cp1251


Автор: sklins 10.11.2013, 22:53
Здравствуйте. Такая проблема у меня.
Дано: база MySQL, кодировка cp1251, на сайте тоже кодировка cp1251. С сайта аяксом отправляется json (как я понимаю, он всегда utf-8), дальше обрабатываю данные с помощью JSON::from_json, далее данные пишутся в базу. В базе получаются кракозябры. Не могу сообразить, в_какую/из_какой кодировки делать encode/decode. Пробывал различные варианты, но не получается. Модуль encode работает только со скалярами, хэш после from_json ему скормить нельзя.  Из идей, только делать foreach по получившемуся хэшу, но считаю это костылём. Кодировку базы и сайта менять не могу.
Помогите, пожалуйста, правильно решить эту проблему.

Автор: Jimy 11.11.2013, 07:59
После подключения к БД и перед тем местом, где нужно работать с utf-8, выполните sql запрос:
Код

SET NAMES utf8;

Автор: Bulat 11.11.2013, 15:10
Каким методом идет запись в БД??

Автор: sklins 11.11.2013, 16:14
Jimy, подключается через конструктор (готовая CMS), так что поменять строку подключения не могу.
Bulat, пишу с помощью do из модуля DBI.

Автор: Bulat 11.11.2013, 17:40
Ну смотри, данные в базу записываются("биндятся") либо в виде скаляров, либо массивом.  Хеш ты ему тоже скормить не можешь. Поэтому

Цитата(sklins @  10.11.2013,  22:53 Найти цитируемый пост)
 Модуль encode работает только со скалярами, хэш после from_json ему скормить нельзя.  Из идей, только делать foreach по получившемуся хэшу, но считаю это костылём.


вполне нормальное решение.

В крайнем случае, перед добавлением строки кода, добавь строчку с комментарием, что-то типа "safe-hack". Не все костыли одинаково вредны.  smile 

Автор: sklins 11.11.2013, 18:48
В конце концов так и сделал)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)