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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кодировки perl, mysql 
:(
    Опции темы
Fenderovna
  Дата 29.5.2013, 04:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть сайт на perl. Все в cp 1251. Получаем данные из формы (аякс) и должны скриптом записать их в базу данных. Прежде использовалась бд в ср1251. В коде присутствуют функции перекодирования вида:
Код

$Text      = encode("Windows-1251", decode("UTF-8", $Text));

Теперь мигрируем на новую в utf-8. Никак не получается адекватно писать кириллицу. Нид хэлп. 
PM MAIL   Вверх
Jimy
Дата 29.5.2013, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



может при соединении к базе выполнить:
Код

SET NAMES cp1251;

смысл приведенного perl-кода не ясен, тем более если вы говорите "Все в cp 1251".
PM   Вверх
Fenderovna
Дата 29.5.2013, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



set names к результату не приводит
все в ср1251 кроме аякса, который всегда работает в утф8, соответственно отдает параметры также в нем
PM MAIL   Вверх
Pfailed
Дата 29.5.2013, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

$dbh->{mysql_enable_utf8} = 1;




--------------------
PM MAIL   Вверх
ginnie
Дата 29.5.2013, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

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



Fenderovna, я не понял, в чем именно проблема? Какие данные в БД пишутся неадекватно?
Еще укажите, что выдает
Код

SHOW VARIABLES LIKE 'character\_set\_%'


Это сообщение отредактировал(а) ginnie - 29.5.2013, 11:20


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Fenderovna
Дата 30.5.2013, 03:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Pfailed @  29.5.2013,  10:27 Найти цитируемый пост)
Выделить всёкод Perl
1:
    
$dbh->{mysql_enable_utf8} = 1;


безрезультатно


Цитата(ginnie @  29.5.2013,  11:17 Найти цитируемый пост)
Какие данные в БД пишутся неадекватно?


любые кириллические

character_set_client utf8
character_set_connection utf8
character_set_database latin1
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system latin1
PM MAIL   Вверх
igorold
Дата 30.5.2013, 07:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

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



Код

$Text      = encode("Windows-1251", decode("UTF-8", $Text));


Перекодировка в примере - это перед записью в базу или после чтения из базы?

Непонятно, что значит всё в cp1251.

В базе данные в какой кодировке хранятся? какая ось на сервере? Какая кодировка страницы в браузере?
Видимо linux - какая там установлена кодировка?

Похоже вы просто запутались в кодировках ...


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


Новичок



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

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



Перед записью
В utf-8
Debian 4
win-1251
PM MAIL   Вверх
igorold
Дата 30.5.2013, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

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



т.е. данные в базе хранятся в кодировке utf-8, а вы перед записью в базу кодируете данные в кодировку Windows-1251, а зачем?

Если данные в базе хранятся в utf-8, то и пишите туда данные в этой кодировке.
А после чтения из базы, делайте перекодирование перед отправкой браузеру в нужной кодировке.

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

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



Может вам так надо писать:

Код

$Text      = encode("UTF-8", $Text);


??

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


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

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



Fenderovna, покажите еще
Код

SHOW CREATE TABLE table_name

для таблицы, в которую Вы записываете данные. Надо посмотреть какие там указаны кодировки.
igorold Вам правильно указал, что перекодировать в cp1251 перед записью в БД не нужно, т.к. у Вас
Код

character_set_client utf8

Укажите еще, как Вы определяете, что данные в базу записались неправильно?

P.S. Я надеюсь, Вы понимаете значения переменных
Код

character_set_client utf8
character_set_connection utf8
character_set_database latin1
character_set_results utf8
character_set_server latin1

если нет, обязательно почитайте про них в документации по MySQL.

Это сообщение отредактировал(а) ginnie - 30.5.2013, 11:39


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
warlock000
Дата 10.6.2013, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Простые правила, без конвертации, итд итп.

1) Если контент в utf-8 то:

1.1) 

Код

$dbh->do("set names utf8");
$dbh->do("SET CHARACTER SET utf8");


1.2) Кодировка документа (скрипта) - UTF-8 (иногда без БОМ), юзай нотепад ++


2) Если контент CP1251

2.1)
Код

$dbh->do("set names CP1251");
$dbh->do("SET CHARACTER SET CP1251");


2.2) Кодировка документа (скрипта) - ANSI


3) Если совсем всё плохо, CP1251 + utf-8

3.1) 
Код

use Encode;


3.2)
Код

$dbh->do("set names utf8");
$dbh->do("SET CHARACTER SET utf8");


3.3)  Кодировка документа (скрипта) - UTF-8

3.4) Конвертируем 
Код

Encode::from_to($test, 'utf-8', 'windows-1251');


3.5) Не забываем про грабли с регулярками, если используется Encode, конвертируем всё в utf8 если даже контент в utf8.

Всё вышеперечисленное спасает от различных граблей с регулярками и исключает проблеммы с кодировками.

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


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

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


 




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


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

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