| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > JSON utf8 |
| Автор: kavkaz 28.10.2008, 19:30 | ||
| Есть скрипт1 который отправляет данные формы скрипту2, далее скрипт2 возвращает JSON скрипту 1. Использую fastcgi. отправляю через LWP::UserAgent
данные записываю в файл, в бд (charset utf8). далее в хэш %js из которого далее будет делаться json (use JOSN::XS) я записываю данные пришедшие из формы(назовем их data1) + данные запрошенные из БД (назовем их data2) делаю $json->asccii(1)->encode(\%js); и это все добро принимает скрипт1. Декодируем my $out = $json->utf8(1)->decode($res->content() ); Речь про символы кирилицы. В описанном алгоритме скрипту 1 в ответ приходят крякозябры в data1. data2 отображаются корректно . Теперь ньюасны. 1. Пришедшие данные записываются в текстовый файл. Если его прочитать то увидим корректное отображение кириллических символов. 2. Пришедшие данные также корректно записываются в БД. 3. При коннекте к БД в атрибутах использую ключ mysql_enable_utf8 => 1. При этом флаге при считывании из БД данных функция Encode::is_utf8($string_from_DB) возвращает TRUE, без флага FALSE. 4. Данные пришедшие из формы, перед вставкой в data1 Не декодирую ( Encode::decode('utf8',$data_from_form)). В данном случае Encode::is_utf8($string_from_form) возвращает FALSE. Решил проблему так: все данные перед вставкой в json должны отдавать Encode::is_utf8($string) значение TRUE, для этого данные из формы, которые вставялю в json я пропускаю через Encode::decode('utf8',$data_from_form). ТОгда ответ нормальный. Я так понимаю у перла есть что то вроде внутреннего стандарта, и когда я ему скармливаю данные в utf8 он конвертирует их в свою кодировку, работает с ними, а когда я записываю в БД или в файл он снова переконвертирует данные в utf8. В случае с json он этого не делает Вопрос: мне так и работать с данными, проверяя их и декодируя если надо, или можно как то перлу объяснить при вставке в json что надо вставлять utf8? ps Извиняюсь если некоторые моменты не до конца описал, могу уточнить. |
| Автор: kavkaz 29.10.2008, 22:43 |
| Вопрос перерос в другой, сделаю новую тему, выложу Результат работы с JSON: ему Всегда данные подавать нужно в utf8, а не в кодировке "внутреннего стандарта перла" |