Forum Webscript.Ru
Программирование => Perl => Тема начата: 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 | Якутск
Запустил этот скрипт из командной строки, - всё наоборот, - русский текст, доставаемый из
базы данных, выводится правильно, а другой руский текст (не из базы) - неправильно.
Как заставить русский текст выводиться нормально?
-
он нормально выводится.
кодировка в командной строке и браузере по умолчанию разная. поэтому в одном месте они нормально читаются, в другом нет
-
Отлично. А как принудительно установить кодировку 1251 и для того, и для другого?
-
что значит "и для того и для другого"? выбери кодировку, в которой ты хочешь это дело хранить. при выводе перекодируй налету.
-
Теперь понятно. У меня MySQL хранит информацию в DOS\'овской кодировке.
А есть какой-нибудь готовый модуль для перевода между различными русскими кодировками?
-
Установи http://www.cpan.org/modules/by-module/namespace/AMICHAUER/cyrillic-2.09.tar.gz
-
а может проще тогда на странице везде прописать DOSовскую кодировку? Какая разница, учитывая что на localhoste?
-
NeoNox
Green Kakadu
:)
SET CLIENT_ENCODING TO \'WIN\'