| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > Spreadsheet::WriteExcel и кодировка |
| Автор: Новичок в perl 15.9.2005, 13:49 |
| Вообщем проблема такая: Есть мускулевская база, в ней записи на русском в 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, то все получается шоколадно. Дяденьки, поможите кто-нить... |
| Автор: BlackLFL 16.9.2005, 12:04 |
| а в какой кодировке отдает данные Mysql? |
| Автор: Guest 17.9.2005, 15:40 | ||
BlackLFL
Судя по всему в 1251 |
| Автор: BlackLFL 19.9.2005, 08:41 | ||||
мне все-таки кажется надо проверить в какой кодировке отдает Mysql |
| Автор: Guest 19.9.2005, 12:49 |
| BlackLFL Мускуль что - перекодировать будет мне из одной кодировки в другую на лету?!! По-моему он отдает в той кодировке, в которой я ему это записывал. А кроме того опытным путем установлено что 1251. |
| Автор: BlackLFL 22.9.2005, 15:53 | ||||
| 2Guest, да будет, см. код ниже. какой версии Spreadsheet::WriteExcel ?
так же попробуйте
|
| Автор: Guest 23.9.2005, 09:36 |
| BlackLFL Версия 2,14. Спасибо, щас попробую |
| Автор: Guest 23.9.2005, 09:40 |
| BlackLFL Нет, ни то, ни другое не помогло. Результат нулевой. |
| Автор: BlackLFL 23.9.2005, 09:43 |
| покажите код, который у Вас в итоге получился. |
| Автор: Guest 23.9.2005, 15:49 | ||
|
| Автор: BlackLFL 23.9.2005, 19:21 |
| не знаю что сказать, у меня данный код отрабатывает корректно Perl 5.8.4 Spreadsheet::WriteExcel 2.15 Encode 2.12 |
| Автор: Guest 24.9.2005, 13:55 |
| BlackLFL А ты его локально из-под виндов запускал или с юникс-системы? Базу данных создавал/юзал? |
| Автор: BlackLFL 25.9.2005, 14:27 |
| я проверял под WinXP, Linux. Какая версия у тебя Mysql, DBD-Mysql,DBI ? |
| Автор: Guest 26.9.2005, 12:07 |
| BlackLFL Честно - не знаю. Я на хостинге у .masterhost (http://masterhost.ru/). Но вроде как у них там модули перловские обновляются постоянно, версии последние... Чесслово - не в кусре |