Какую кодировку содержимого использует скрипт Perl CGI по умолчанию? - PullRequest
3 голосов
/ 07 октября 2008

Я модифицирую зрелое CGI-приложение, написанное на Perl, и встал вопрос о кодировке контента. Браузер сообщает, что контент имеет кодировку iso-8859-1, и приложение объявляет iso-8859-1 как кодировку в заголовках HTTP, но кажется, что фактически не выполняет кодирование. Ни один из различных методов кодирования, описанных в руководствах perldoc ( Encode , Encoding , Open ), не используется в коде, поэтому я немного запутался как документ на самом деле кодируется.

Как уже упоминалось, приложение является достаточно зрелым и, вероятно, предшествует многим из существующих методов кодирования. Кто-нибудь знает какие-либо устаревшие или устаревшие методы, которые я должен искать? Какой кодировке Perl предполагает / по умолчанию, когда разработчик не указывает направление?

Спасибо

Ответы [ 4 ]

8 голосов
/ 07 октября 2008

По умолчанию Perl обрабатывает строки как последовательности байтов, поэтому, если вы читаете из файла и выводите его в STDOUT, он создаст ту же последовательность байтов. Если ваши шаблоны - Latin-1, ваш вывод будет также Latin-1.

Если вы используете строку в контексте текстовой строки (например, с uc, lc и т. Д.), Perl принимает семантику Latin-1, если строка не была декодирована ранее.

Подробнее о Perl, кодировках и кодировках

2 голосов
/ 07 октября 2008

Perl ничего не предполагает, но браузер предполагает, что кодирование обычно основано на догадках. Документы выводятся напрямую, так же, как они были написаны, если не используется ни один из методов кодирования.

Вы можете указать кодировку в заголовке HTTP Content-Type.

1 голос
/ 26 марта 2009

Первое, на что я посмотрю, это конфигурация сервера. Если вы не устанавливаете заголовок кодировки содержимого в программе, вы, вероятно, принимаете предположение сервера.

Запустите скрипт отдельно от сервера, чтобы увидеть его фактический результат. Когда сервер получает выходные данные из CGI-программы (это не nph), он исправляет заголовок для всего, что, по его мнению, отсутствует, прежде чем отправить его клиенту.

0 голосов
/ 07 октября 2008

Если браузер сообщает о содержимом как iso-8859-1, возможно, ваш Perl-скрипт не вывел правильные заголовки для указания кодировки?

...