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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не могу выдать страничку в правильной кодировке, получаю из оракла данные на Linux 
V
    Опции темы
dmitryk1
Дата 19.6.2008, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Помогите победить кодировку. Нашёл в разных источниках разные данные. всё попробовал... 

Скрипт высасывает данные из оракла, в консоли отображается по русски. Последняя измученная и установленная мной кодировка в линухе - koi8r. В таком виде скрипт в консоле выдаёт русский текст и ошибку:



Код

#!/usr/bin/perl -w

use CGI::WebOut;
use JSON; # imports encode_json, decode_json, to_json and from_json.
use Encode qw(encode decode);

#use encoding "ru_RU.CP1251";

#use POSIX qw(locale_h);
#use locale;
#setlocale(LC_CTYPE, "ru_RU.cp1251");

#binmode(STDIN, ':cp1251');
#binmode(STDOUT, ':cp1251');

$oracle_server="oraserv";
$oracle_listener="listener";
$oracle_sid="ora";
$oracle_port="1521";
$oracle_user="us";
$oracle_password="pas";
$oracle_testing_table="TEST";

#Header("Content-Type: text/html; charset=cp1251");


$oracle_query="

    SELECT 
   o.name, u.username, u.account_status, g.name, o.note
    from dba_users u
    where u.username like upper('ivanov%')

";

use DBI;
use DBD::Oracle;
#use utf8;
#binmode(STDIN, ":encoding(cp1251)"); 
#binmode(STDOUT, ":encoding(cp1251)");
#binmode(STDERR, ":encoding(cp1251)");
#binmode(STDIN, ':cp1251');
#binmode(STDOUT, ':cp1251');

my $dbh = DBI->connect("dbi:Oracle:host=$oracle_server;port=$oracle_port;sid=$oracle_sid",
                                           $oracle_user, $oracle_password) 
  or die "Impossible de se connecter &? la base Oracle : " . DBI->errstr;

my $sth = $dbh->prepare($oracle_query)
  or die "Impossible de preparer la requette: " . $dbh->errstr;

$sth->execute()
  or die "Impossible d'ex&?cuter la requette: " . $sth->errstr;

while(my @data = $sth->fetchrow_array())
{
    print  Encode::encode('cp1251', Encode::decode('koi8r', to_json(\@data)));
}




1) Fatal: Can't locate Encode/ConfigLocal.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.8.8 /usr/local/share/perl/5.8.8 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl .) at /usr/local/lib/perl/5.8.8/Encode.pm line 54.

соответственно через CPAN Encode::ConfigLocal не ставится. Encode стоит.

oracle говорит что у него кодировка AMERICAN_AMERICA.CL8KOI8R, но в консоль - то печатает понятно. Только в броузер вопросики.


PM MAIL GTalk Jabber   Вверх
Bulat
Дата 19.6.2008, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



Цитата(dmitryk1 @  19.6.2008,  11:18 Найти цитируемый пост)
1) Fatal: Can't locate Encode/ConfigLocal.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.8.8 /usr/local/share/perl/5.8.8 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl .) at /usr/local/lib/perl/5.8.8/Encode.pm line 54.


Жалуется на то, что не может найти модуль Encode/ConfigLocal.pm. Это во-первых.

Во-вторых, хочется убедится что у твоего браузера действительно кодировка настроена на cp1251.

А в третьих, в том же модуле есть метод from_to(если не ошибся в названии), ИМХО проще его юзать smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
ginnie
Дата 19.6.2008, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Уважаемый dmitryk1, может поможет указание ora_charset:

Код

$dbh = DBI->connect ($dsn, $user, $passwd, {ora_charset => 'CP1251'});



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


Шустрый
*


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

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



Цитата(ginnie @ 19.6.2008,  15:30)
Код

$dbh = DBI->connect ($dsn, $user, $passwd, {ora_charset => 'CP1251'});

1) Fatal: ora_charset value (CP1251) is not valid at /usr/local/lib/perl/5.8.8/DBD/Oracle.pm line 229.

:( маленькими буквами и кои8р тоже попробовал.

Цитата

Жалуется на то, что не может найти модуль Encode/ConfigLocal.pm. Это во-первых.

Во-вторых, хочется убедится что у твоего браузера действительно кодировка настроена на cp1251.

А в третьих, в том же модуле есть метод from_to(если не ошибся в названии), ИМХО проще его юзать 



про модуль я понял. его и на CPAN нету. 

про броузер не понял, я с виндовой тачки с ИЕ захожу и в контекстном меню кодировки выбираю, да и в блокноте смотрел - те же вопросики 

а про перекодировку... 
Я слабо разбираюсь в линухе и случайно настроил в нём локаль кои8р, теперь я хочу выводить всё это счастье в броузер. и если бы получилось выводить в той же кодировке что и ввёл, уже было бы хорошо. А потом уже можно и перекодированиями заняться. только выводит почему-то именно вопросики, не другую кодировку, которая лечится сменой кодировки в броузере...

в общем что-то загадочно страшное :(
PM MAIL GTalk Jabber   Вверх
ginnie
Дата 19.6.2008, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



dmitryk1, возможно сработает {ora_charset => 'CL8MSWIN1251'}


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


Шустрый
*


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

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



Цитата(ginnie @ 19.6.2008,  18:13)
dmitryk1, возможно сработает {ora_charset => 'CL8MSWIN1251'}

 smile  smile  smile 

Огромный сенк!!!!!

С меня пиво!!! (если ты недалеко от новосиба smile  )
PM MAIL GTalk Jabber   Вверх
nitr
Дата 20.6.2008, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



dmitryk1
[offtopic]
далековато он ;) в профиле Москва smile . Поставлю ему за это "+", тем более и за другие топики он заслуживает!


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


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

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


 




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


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

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