Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кодировка, ajax, mysql, perl, Выводятся вопросики. 
V
    Опции темы
Marlik
Дата 8.10.2013, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 25.2.2007
Где: Рязань

Репутация: нет
Всего: нет



Доброго времени суток. Ситуация такая, есть дамп mysql в utf8, заливаю его в базу. Смотрю на базу:

Код

Сервер: Localhost via UNIX socket
Версия сервера: 5.5.32-0ubuntu0.12.10.1
Версия протокола: 10
Пользователь: marlik@localhost
MySQL-кодировка: UTF-8 Unicode (utf8)


Код

SHOW GLOBAL VARIABLES LIKE 'char%';


Код

character_set_client    utf8
character_set_connection    utf8
character_set_database    utf8
character_set_filesystem    binary
character_set_results    utf8
character_set_server    utf8
character_set_system    utf8
character_sets_dir    /usr/share/mysql/charsets/


Все таблицы в utf8_general_ci , текст русский, читабельный. Далее открываю форму регистрации, идет выбор страны, региона, города. То есть по событию Onselect() запускается jQuery, затем с помощью ajax делаем запрос к *.cgi скрипту, вот скрипт:

Код

<script type="text/javascript">

$(function(){

$('#country').change(function(){
   
    var country = $(this).val()   
    
    var request = $.ajax({
      url: "./cgi-bin/city.cgi",
      type: "GET",
      dataType : "json",
      data: { country : country }
    });
    
    request.done(function( msg ) {

    var response = msg 
    
      var cityEl     = $('#state')
      cityEl.empty()
     
       for (var key in response){
   
      cityEl.append('<option value=' + key + '>' + response[key] + '</option>')              
     
}
   });
 
      })

</script>


В html странице стоит кодировка:

Код

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">


Так как ajax использует utf8 по умолчанию, особо не парюсь. Тем более данные идут в цифре то есть id=312.

Принимаю в *.cgi скрипте параметры делаю выборку из базы, кодирую в json и возвращаю.

Код

    $hash_ref = encode_json $hash_ref;   
    print $cgi->header(-type => "application/json", -charset => "utf8");
    print "$hash_ref";



На странице получаю  ??????  вместо русского текста. Куда рыть подскажите?








  

Это сообщение отредактировал(а) Marlik - 8.10.2013, 15:12
PM WWW Skype   Вверх
Grost
Дата 8.10.2013, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 26.8.2010
Где: Москва

Репутация: нет
Всего: нет



Могу предложить в коде использовать прагму utf8.

У меня похожее было с шаблонами, но как только в контроллере вызывающий шаблон ставлю use utf8; то всё становится нормально

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL ICQ   Вверх
Marlik
Дата 8.10.2013, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 25.2.2007
Где: Рязань

Репутация: нет
Всего: нет



Спасибо, не помогло...
PM WWW Skype   Вверх
Jimy
Дата 8.10.2013, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 4.7.2010

Репутация: нет
Всего: 3



Можно проверить еще кодировку самого файла скрипта. Если он не utf-8 и в самом скрипте присутствует кириллица в виде хардкода, то при, например, объединении строк будет портится кодировка. 
Других идей не приходит. Но, думаю, локализовать место, в котором происходит искажение, не трудно.
PM   Вверх
alezzz
Дата 8.10.2013, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

Репутация: 2
Всего: 14



попробуйте для переменной в utf8 сделать Encode::_utf8_on
PM MAIL   Вверх
Jimy
Дата 8.10.2013, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 4.7.2010

Репутация: нет
Всего: 3



И еще вдогонку. Можно проверить флаг utf8 у строк перед отправкой ajax'ом. Если я не ошибаюсь, он не должен быть установлен при отправке данных клиенту. Но если и ошибаюсь, то варианта всего два - можно перебрать
PM   Вверх
Marlik
Дата 9.10.2013, 07:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 25.2.2007
Где: Рязань

Репутация: нет
Всего: нет



Цитата(Jimy @ 8.10.2013,  17:41)
Можно проверить еще кодировку самого файла скрипта. Если он не utf-8 и в самом скрипте присутствует кириллица в виде хардкода, то при, например, объединении строк будет портится кодировка. 
Других идей не приходит. Но, думаю, локализовать место, в котором происходит искажение, не трудно.

Работаю в Ubuntu, все стоит по utf8. Спасибо.
PM WWW Skype   Вверх
Marlik
Дата 9.10.2013, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 25.2.2007
Где: Рязань

Репутация: нет
Всего: нет



Цитата(alezzz @ 8.10.2013,  17:44)
попробуйте для переменной в utf8 сделать Encode::_utf8_on

Код

use utf8;
use Encode;

$value = Encode::_utf8_on( $value );


Возвращает ноль.

Код

$value = Encode::encode_utf8($value);
$value = Encode::decode_utf8($value);


Возвращают вопросики. Куда копать? Спасибо.
PM WWW Skype   Вверх
Grost
Дата 9.10.2013, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 26.8.2010
Где: Москва

Репутация: нет
Всего: нет



Чем коннектитесь к базе?
Может стоит при коннекте указать mysql_enable_utf8 = 1?

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL ICQ   Вверх
Jimy
Дата 9.10.2013, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 4.7.2010

Репутация: нет
Всего: 3



Цитата(Marlik @  9.10.2013,  09:42 Найти цитируемый пост)
Куда копать? Спасибо. 

Может быть вот сюда: http://search.cpan.org/~dankogai/Encode-2....#39;s_Internals
PM   Вверх
Marlik
Дата 9.10.2013, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 25.2.2007
Где: Рязань

Репутация: нет
Всего: нет



Кажется разобрался... была база кривая. Поставил другой дамп, теперь правда не вопросики а в кодировке ISO-8859-1 все лезет, причем посмотрел в декодере Лебедева, часть символов все-таки вопросиками... Пока думаю как быть и что делать?

Добавлено @ 13:57
Цитата(Alex Feat @ 9.10.2013,  11:28)
Чем коннектитесь к базе? 
Может стоит при коннекте указать mysql_enable_utf8 = 1?

Этот ответ добавлен с нового Винграда - http://vingrad.com

К базе коннектюсь скриптом на Perl. В топе концовка.

Мне кажется вот такие варианты:

1. База в неправильной кодировке.
2. CGI неправильно передает кодировку, несмотря на то что выставил utf8.

Как лечить, наверное попробовать взять рабочую базу, попробовать с ней. Второй вариант, пойти с горя напиться, проснутся в кутузке, и додумывать куда копать? ))) 


Попробовал 100% рабочую базу. Выходит такая-же хрень... буду думать что-то с Encode.
На всякий случай, записал хэш вывода из базы тут-же в файл. В файле кирилица на ура. Пытать CGI?




Это сообщение отредактировал(а) Marlik - 9.10.2013, 15:05
PM WWW Skype   Вверх
Marlik
Дата 10.10.2013, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 25.2.2007
Где: Рязань

Репутация: нет
Всего: нет



Мдяяяяяя.... вот что значит документацию не читать!!! Сработал такой вариант:

Код

use utf8;
use Encode;
Encode::_utf8_on( $value );


А я делал так:

Код

use utf8;
use Encode;
$value = Encode::_utf8_on( $value );


Функция _utf8_on возвращает либо ноль либо один. Она просто выставляет флаг для переменной! 

Всем спасибо!
PM WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.1225 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.