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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Perl/Tk, ириллица 
V
    Опции темы
frenkys
Дата 22.9.2006, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вобщем пишу на TK GUI использую 
use encoding "ru_RU.CP1251";

русские названия везде отображаються отлично, но вот когда хочу из Entry прочитать что-то по русски то :

если попросить print то он выводит в консоль абракадабру, 
когда отображаю прочитаное с Entry на  самой форме  GUI все ок,
когда это записываю в базу записывает мне абракадабры

что делать?
--------------------
 niva[frenky]
PM MAIL WWW   Вверх
nitr
Дата 22.9.2006, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



frenkys, как что? smile
1. поиск по форуму, про БД не раз уже обсуждалось
2. консоль: *nix - koi8-r, Windows - cp866 (меняй кодировки)
используй к примеру модуль Encode
perldoc Encode


--------------------
PM   Вверх
frenkys
Дата 23.9.2006, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



ну это понятно я уже 2 дня рою всю возможную инфу во всег гуглах вингардах......
вобщем я б не спрашивал если что.


2) про консоли это понтяно


1) вобщем такая ситуация вот 

для проверки написал обычный скриптец не ТК! 

без строчки  use encoding "ru_RU.CP1251";
он нормалек пишет в Access  русские слова

как токо ставлю  use encoding "ru_RU.CP1251"; то он пишет в Аккесс абракадабру  хотя в обычный текстовый файлик нормально.

но для ТК полюбому нужна строка 
use encoding "ru_RU.CP1251";
иначе отображаться н ебудут русские надписи

а записать в аккес мне нужно из под ТК
--------------------
 niva[frenky]
PM MAIL WWW   Вверх
nitr
Дата 23.9.2006, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



всё же попробуй perldoc Encode


--------------------
PM   Вверх
frenkys
Дата 23.9.2006, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



о, если б я еще мог узнать какая последовательность преобразований между кодировками нужна чтобы получить нужный мне  кириличный текст
--------------------
 niva[frenky]
PM MAIL WWW   Вверх
nitr
Дата 23.9.2006, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



frenkys, а я к примеру нетелепат smile потестируй, метод подбора, результат 100% ;)

Добавлено @ 00:52 
и покажи строчку подключения к БД smile


--------------------
PM   Вверх
frenkys
Дата 23.9.2006, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



вобщем вот:

Код

#!/usr/bin/perl -w

use CGI::Carp qw(fatalsToBrowser);
use DBI;
use  CGI qw(header);
use encoding 'cp1251', STDOUT=>'cp1251';


$|=1;


#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
sub db_connect
{

$dsn = 'driver=Microsoft Access Driver (*.mdb);dbq=db.mdb';
$dbh = DBI->connect("dbi:ODBC:$dsn", '', '', {PrintError => 0, RaiseError => 1});
$dbh->{LongReadLen} = 20000;
    return $dbh;
}
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@


db_connect();


$sth = $dbh->prepare ("SELECT id,title,web,fio,info,plan from main WHERE id=1");
$sth->execute() || quit();
    while (@data = $sth->fetchrow_array()) {
    $a.="$data[0]";
       
                        }
@data=();


$str="атакуем ть";

$a.="<B>$str</b>";


$query = "INSERT INTO history (id,dat,zam) VALUES (1,now(),'$str')";
$dbh->do($query) || quit(); 


$sth = $dbh->prepare ("SELECT dat,zam from history WHERE id=1 ORDER by dat DESC");
$sth->execute() || quit();
    while (@data = $sth->fetchrow_array()) {
    $a.="$data[0] $data[1]<BR>";
       
                        }
@data=();



print header(-charset=>'Windows-1251');
print $a;






Вобщем получаеться вместо  атакуем ть: атакуем блять





Это сообщение отредактировал(а) frenkys - 23.9.2006, 01:14
--------------------
 niva[frenky]
PM MAIL WWW   Вверх
nitr
Дата 23.9.2006, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



давай без мата smile отредактируй, карается сильно!!!

добавь после коннекта такое
Код

$dbh->do("SET character_set_client = cp1251");
$dbh->do("SET character_set_connection = cp1251");
$dbh->do("SET character_set_results = cp1251");




--------------------
PM   Вверх
frenkys
Дата 23.9.2006, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



подобрал  кодировку получил

utf-8-strict 
utf8

тоесь в БД они попадают уже в такой кодировке значит тобы попали в нормальной нужно обратно их перекодировать тоесть сделать


$str="русский текст";
from_to($str, "cp1250", "utf8");

но получаю ошибку при віполнении from_to:
Wide character in subroutine entry at C:/Perl/lib/Encode.pm line 186.

Добавлено @ 01:17 
Цитата(nitr @  23.9.2006,  01:08 Найти цитируемый пост)
добавь после коннекта такое

код Perl
1:
2:
3:

$dbh->do("SET character_set_client = cp1251");
$dbh->do("SET character_set_connection = cp1251");
$dbh->do("SET character_set_results = cp1251");



Software error:
DBD::ODBC:smileb do failed: [Microsoft][\x{00c4}\x{00f0}\x{00e0}\x{00e9}\x{00e2}\x{00e5}\x{00f0} ODBC Microsoft Access] \x{00ce}\x{00f8}\x{00e8}\x{00e1}\x{00ee}\x{00f7}\x{00ed}\x{00e0}\x{00ff} \x{00e8}\x{00ed}\x{00f1}\x{00f2}\x{00f0}\x{00f3}\x{00ea}\x{00f6}\x{00e8}\x{00ff} SQL; \x{00ef}\x{00f0}\x{00e5}\x{00e4}\x{00ef}\x{00ee}\x{00eb}\x{00e0}\x{00e3}\x{00e0}\x{00eb}\x{00ee}\x{00f1}\x{00fc} 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' \x{00e8}\x{00eb}\x{00e8} 'UPDATE'. (SQL-42000)(DBD: Execute immediate failed err=-1) at C:\inet\localhost\cgi\mibd\t.pl line 47.

For help, please send mail to the webmaster ([email protected]), giving this error message and the time and date of the error.

Добавлено @ 01:18 
или же по русски 

Software error:
DBD::ODBC:smileb do failed: [Microsoft][Драйвер ODBC Microsoft Access] Ошибочная инструкция SQL; предполагалось 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' или 'UPDATE'. (SQL-42000)(DBD: Execute immediate failed err=-1) at C:\inet\localhost\cgi\mibd\t.pl line 47.

For help, please send mail to the webmaster ([email protected]), giving this error message and the time and date of the error. 

--------------------
 niva[frenky]
PM MAIL WWW   Вверх
nitr
Дата 23.9.2006, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



не используй from_to($str, "cp1250", "utf8");
прочти про encode и decode
примерно так:
Код

#!perl
use Encode qw(encode decode);
$str="русский текст";
$str = decode('cp1251', $str);
$str = encode('utf8', $str);
print $str;


объединять в одну строку не рекомендую? в старых версиях только так работает smile с какой версии исправили, не помню.


--------------------
PM   Вверх
frenkys
Дата 23.9.2006, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



вот что получаю:

Wide character in subroutine entry at C:/Perl/lib/Encode.pm line 166.

Добавлено @ 01:36 
щас попробую новую версию encode поставить
--------------------
 niva[frenky]
PM MAIL WWW   Вверх
nitr
Дата 23.9.2006, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



ну да.. а ты что делаешь? что так выводит? smile


--------------------
PM   Вверх
frenkys
Дата 23.9.2006, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



установил последнюю версию Encode:


:О) опять  проблема

код 
Цитата(nitr @  23.9.2006,  01:30 Найти цитируемый пост)
#!perl
use Encode qw(encode decode);
$str="русский текст";
$str = decode('cp1251', $str);
$str = encode('utf8', $str);
print $str;


если вписать туда 
use encoding 'cp1251';

выдает ошибку

Wide character in subroutine entry at C:/Perl/lib/Encode.pm line 166.

--------------------
 niva[frenky]
PM MAIL WWW   Вверх
nitr
Дата 23.9.2006, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



в поиске на форуме введи Wide character и поймёшь ;)


--------------------
PM   Вверх
frenkys
Дата 23.9.2006, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



понял что код символов больше 255, увидел пост с модулем Text::Iconv но так и не понял как с помощь него сделать 

$str = decode('cp1251', $str);
$str = encode('utf8', $str);


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


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

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


 




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


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

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