Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > проблема с кодировками


Автор: GShadrin 23.8.2009, 18:20
На стороне клиента передается русский текст на сервер. Используется метод get. 
Печатаю принтом это поле - получаю "Перл" вместо "Перл".
Стоит "Русский apache".
Кодировка страницы charset=windows-1251
На сервере такой код:
Код

#!/usr/bin/perl
use CGI qw(:standard);
print "Content-type: text/plain; charset=windows-1251\n\n";
$namereg=param('namereg');
print $namereg;


читал вот такое
    * Если ASCII код символа больше 32 и меньше 128, то он будет выдан без изменения.
    * если символ - пробел, то он заменится на "+" (плюсик, без кавычек) все остальное преобразуется в вид %xx, где xx -- шестнадцатеричный код символа. Если вам повезло и у вас "Русский apache", то он преобразует его в нормальную кодировку.
http://www.linux.org.ru/books/perl-faq/ru-perl-faq-4.html

Но процентиков у меня не выводит. Значит apache его преобразовал. Почему текст битый?


Если напишу: print("Перл");  напечатает "Перл"

Автор: GoodBoy 25.8.2009, 16:17
Цитата(GShadrin @  23.8.2009,  19:20 Найти цитируемый пост)
"Перл" 

Это - Юникод... Копай в эту сторону... Данные со страницы у тебя приходят не в той кодировке...

Автор: sir_nuf_nuf 26.8.2009, 08:11
Цитата(GShadrin @  23.8.2009,  18:20 Найти цитируемый пост)
получаю "Перл" 


Цитата(GoodBoy @  25.8.2009,  16:17 Найти цитируемый пост)
Это - Юникод...


Неплохо.. это в школе джедаев кракозябры читать учат ?

Добавлено через 5 минут и 16 секунд
Хм.. по делу:

1) попробовать не print на страницу делать,
а print STDERR - что выведет в лог сервера ?
2) попробовать перед выводом данных на страницу конвертировать их
из utf-8 в windows-1251.
Похоже, что "русский" апач - конвертит автоматически в utf8 входные данные.

Автор: GShadrin 26.8.2009, 11:54
Цитата(sir_nuf_nuf @  26.8.2009,  08:11 Найти цитируемый пост)
1) попробовать не print на страницу делать,
а print STDERR - что выведет в лог сервера ?

попробывал
В лог записалось в кодировке utf-8, хотя кодировка страницы windows-1251
Почему так происходит?
Браузер передает в формате utf-8, хотя кодировка windows-1251 или "русский" апач разбирает в utf-8?

Буду пробывать переконвертировать.
Спасибо за помощь.

Автор: GShadrin 26.8.2009, 12:12
перекодировал из utf-8 в windows-1251 все работает

Автор: sir_nuf_nuf 26.8.2009, 14:33
Цитата(GShadrin @  26.8.2009,  11:54 Найти цитируемый пост)
Браузер передает в формате utf-8, хотя кодировка windows-1251 или "русский" апач разбирает в utf-8?

посмотрите, что передается по HTTP. Можно воспользоваться сниффером.

Автор: aksined 28.8.2009, 14:08
не нужно пользоваться снифеером
русский апач сам ничего не конвертирует.

Код

В лог записалось в кодировке utf-8, хотя кодировка страницы windows-1251
Почему так происходит?
Браузер передает в формате utf-8, хотя кодировка windows-1251 или "русский" апач разбирает в utf-8?


Вы же сами видите, что в лог записались данные в utf-8. Если Вы не приложите усилий по конвертированию их в нужную кодировку, апач этого сам делать не будет. Какие данные вы будете отдавать скриптом, такие они и уйдут к клиенту.
Кодировка страницы - это то, как будет браузер на стороне клиента интерпретировать данные.
Предлагаю эксперимент. Уберите конвретирование, а на стороне клиента руками поменяйте кодировку на utf-8

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)