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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Spreadsheet::WriteExcel и кодировка, Трабл 
:(
    Опции темы
Новичок в perl
Дата 15.9.2005, 13:49 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Вообщем проблема такая:
Есть мускулевская база, в ней записи на русском в cp1251.
Есть скрипт:

#!/usr/bin/perl
$| = 1;

use lib "/home/unumber/perl/lib/perl5/site_perl/5.8.6/";
use strict;
use Spreadsheet::WriteExcel;

use DBI;
use CGI::Carp qw(fatalsToBrowser);

use encoding 'cp1251', STDIN=>'cp1251', STDOUT=>'cp1251';

# Set the filename and send the content type
my $filename ="price.xls";

print "Content-type: application/vnd.ms-excel\n";
# The Content-Disposition will generate a prompt to save the file. If you want
# to stream the file to the browser, comment out the following line.
print "Content-Disposition: attachment; filename=$filename\n";
print "\n";

# Create a new workbook and add a worksheet. The special Perl filehandle - will
# redirect the output to STDOUT
#
my $workbook = Spreadsheet::WriteExcel->new("-");
my $worksheet = $workbook->add_worksheet();

# Set the column width for column 1
$worksheet->set_column(0, 0, 40);

# Create a format
my $format = $workbook->add_format();
$format->set_bold();
$format->set_size(15);
$format->set_color('red');

#print "Content-Type: text/html\n\n";

my $dbh=DBI->connect('DBI:mysql:server','uname','passwd');

my $SQL="SELECT * FROM price ORDER BY parent, name DESC";

my $sth=$dbh->prepare($SQL);
$sth->execute();

my $row=0;

while (my ($id, $parent, $name, $text, $price, $foto) = $sth->fetchrow_array())
{
my $test = "Строка по-русски";
$worksheet->write($row, 0, $price, $format);
$row = $row +1;
}

Скрипт отдает экселевский файл, но кодировка неправильная.
При этом если в строке
"$worksheet->write($row, 0, $price, $format);"
$price заменить на $test, то все получается шоколадно.

Дяденьки, поможите кто-нить... smile
  Вверх
BlackLFL
Дата 16.9.2005, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



а в какой кодировке отдает данные Mysql?
PM WWW   Вверх
Guest
Дата 17.9.2005, 15:40 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











BlackLFL
Цитата(BlackLFL @ 16.9.2005, 12:04)
а в какой кодировке отдает данные Mysql?

Судя по всему в 1251
  Вверх
BlackLFL
Дата 19.9.2005, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Guest @ 17.9.2005, 15:40)
BlackLFL
Цитата(BlackLFL @ 16.9.2005, 12:04)
а в какой кодировке отдает данные Mysql?

Судя по всему в 1251

мне все-таки кажется надо проверить в какой кодировке отдает Mysql
PM WWW   Вверх
Guest
Дата 19.9.2005, 12:49 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











BlackLFL
Мускуль что - перекодировать будет мне из одной кодировки в другую на лету?!! По-моему он отдает в той кодировке, в которой я ему это записывал.
А кроме того опытным путем установлено что 1251.
  Вверх
BlackLFL
Дата 22.9.2005, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



2Guest, да будет, см. код ниже.


какой версии Spreadsheet::WriteExcel ?

Код

use encoding "ru_RU.CP1251";

так же попробуйте
Код

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


Это сообщение отредактировал(а) BlackLFL - 22.9.2005, 15:55
PM WWW   Вверх
Guest
Дата 23.9.2005, 09:36 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











BlackLFL
Версия 2,14. Спасибо, щас попробую
  Вверх
Guest
Дата 23.9.2005, 09:40 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











BlackLFL
Нет, ни то, ни другое не помогло. Результат нулевой.
  Вверх
BlackLFL
Дата 23.9.2005, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



покажите код, который у Вас в итоге получился.
PM WWW   Вверх
Guest
Дата 23.9.2005, 15:49 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Код

#!/usr/bin/perl
$| = 1;

use lib "/home/u*****/perl/lib/perl5/site_perl/5.8.6/";
use strict;
use Spreadsheet::WriteExcel;

use DBI;
use CGI::Carp qw(fatalsToBrowser);
use encoding "ru_RU.CP1251";
#use encoding 'cp1251'; #, STDOUT => 'cp1251'; #STDOUT => 'utf-8';
#use encoding 'cp1251', STDIN=>'cp1251', STDOUT=>'cp1251';
use Encode;
use Text::Iconv;

# Set the filename and send the content type
my $filename ="price.xls";

print "Content-type: application/vnd.ms-excel\n";
# The Content-Disposition will generate a prompt to save the file. If you want
# to stream the file to the browser, comment out the following line.
print "Content-Disposition: attachment; filename=$filename\n";
print "\n";

# Create a new workbook and add a worksheet. The special Perl filehandle - will
# redirect the output to STDOUT
#
my $workbook  = Spreadsheet::WriteExcel->new("-");
my $worksheet = $workbook->add_worksheet();

# Set the column width for column 1
$worksheet->set_column(0, 0, 40);

# Create a format
my $format = $workbook->add_format();
$format->set_bold();
$format->set_size(15);
$format->set_color('red');

#print "Content-Type: text/html\n\n";

my $dbh=DBI->connect('DBI:mysql:u*****:u*****.mysql.masterhost.ru','u*****','PASSWORD');
$dbh->do("SET character_set_client = cp1251");    
$dbh->do("SET character_set_connection = cp1251");    
$dbh->do("SET character_set_results = cp1251"); 

my $SQL="SELECT * FROM price ORDER BY parent, name DESC";

my $sth=$dbh->prepare($SQL);
$sth->execute();

my $row=0;

while (my ($id, $parent, $name, $text, $price, $foto) = $sth->fetchrow_array())
{

#:encoding(cp1251) => my $test = "Тест";

# Write to the workbook
#my $converter = Text::Iconv->new("koi8-r", "cp1251");

$worksheet->write($row, 0, $price, $format);
$row = $row +1;
}


  Вверх
BlackLFL
Дата 23.9.2005, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



не знаю что сказать, у меня данный код отрабатывает корректно

Perl 5.8.4
Spreadsheet::WriteExcel 2.15
Encode 2.12
PM WWW   Вверх
Guest
Дата 24.9.2005, 13:55 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











BlackLFL
А ты его локально из-под виндов запускал или с юникс-системы? Базу данных создавал/юзал? smile
  Вверх
BlackLFL
Дата 25.9.2005, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



я проверял под WinXP, Linux.
Какая версия у тебя Mysql, DBD-Mysql,DBI ?
PM WWW   Вверх
Guest
Дата 26.9.2005, 12:07 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











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


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

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


 




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


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

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