Forum Webscript.Ru

Программирование => Perl => Тема начата: D.O. от 22 Ноября 2004, 18:01:00

Название: Perl, DBI, MySQL, под Windows, проблема с русскими буквами
Отправлено: D.O. от 22 Ноября 2004, 18:01:00
Стоит Perl 5.8.4, DBI 1.43, MySQL 4.0.13, Apache 2.0.50 всё под Windows XP SP2 (русский).
Ещё используется HTML::Template.

Гоняю тестовый скрипт, который получает данные из таблицы.
Вот фрагмент:
##########
my $q = "SELECT * FROM region";
$sth = $dbh->prepare($q) || die "Couldn\'t prepare statement: " . $dbh->errstr;
$sth->execute() || die "Couldn\'t execute statement: " . $sth->errstr;

while ($i = $sth->fetchrow_hashref()) {
     $regions .= $i->{id};
     $regions .= " ";
     $regions .= $i->{name};
     $regions .= "\\n";
}
##########

$regions заносится как значение переменной в шаблон HTML::Template и выводится.

Всё работает, но русские символы выводятся на странице в нечитаемом виде:
115 “«мп_®ўбЄ
116 “д
117 • _вл-Њ _бЁ©бЄ
118 —Ґ«пЎЁ_бЄ
119 џЄгвбЄ

Другие русские символы (текст не из базы данных), выводящиеся через template на той же самой

странице, выводятся нормально.
При этом в консоли MySQL всё выводится правильно:
| 116 | Уфа
| 117 | Ханты-Мансийск
| 118 | Челябинск
| 119 | Якутск

Запустил этот скрипт из командной строки, - всё наоборот, - русский текст, доставаемый из

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

Как заставить русский текст выводиться нормально?
Название: Perl, DBI, MySQL, под Windows, проблема с русскими буквами
Отправлено: AliMamed от 22 Ноября 2004, 18:37:20
он нормально выводится.
кодировка в командной строке и браузере по умолчанию разная. поэтому в одном месте они нормально читаются, в другом нет
Название: Perl, DBI, MySQL, под Windows, проблема с русскими буквами
Отправлено: D.O. от 22 Ноября 2004, 20:02:07
Отлично. А как принудительно установить кодировку 1251 и для того, и для другого?
Название: Perl, DBI, MySQL, под Windows, проблема с русскими буквами
Отправлено: AliMamed от 23 Ноября 2004, 01:47:50
что значит "и для того и для другого"? выбери кодировку, в которой ты хочешь это дело хранить. при выводе перекодируй налету.
Название: Perl, DBI, MySQL, под Windows, проблема с русскими буквами
Отправлено: D.O. от 23 Ноября 2004, 14:08:33
Теперь понятно. У меня MySQL хранит информацию в DOS\'овской кодировке.
А есть какой-нибудь готовый модуль для перевода между различными русскими кодировками?
Название: Perl, DBI, MySQL, под Windows, проблема с русскими буквами
Отправлено: NeoNox от 23 Ноября 2004, 15:15:00
Установи http://www.cpan.org/modules/by-module/namespace/AMICHAUER/cyrillic-2.09.tar.gz
Название: Perl, DBI, MySQL, под Windows, проблема с русскими буквами
Отправлено: Green Kakadu от 23 Ноября 2004, 15:29:53
а может проще тогда на странице везде прописать DOSовскую кодировку? Какая разница, учитывая что на localhoste?
Название: Perl, DBI, MySQL, под Windows, проблема с русскими буквами
Отправлено: commander от 23 Ноября 2004, 16:07:37
NeoNox
Green Kakadu
:)
SET CLIENT_ENCODING TO \'WIN\'