#perl #iso-8859-1 #content-encoding
Вопрос:
Я модифицирую зрелое приложение CGI, написанное на Perl, и возник вопрос о кодировании контента. Браузер сообщает, что содержимое закодировано по стандарту iso-8859-1, и приложение объявляет iso-8859-1 в качестве кодировки в заголовках HTTP, но, похоже, на самом деле не выполняет кодировку. Ни один из различных методов кодирования, описанных в учебниках perldoc (Кодирование, кодирование, Открытие), не используется в коде, поэтому я немного не понимаю, как на самом деле кодируется документ.
Как уже упоминалось, приложение является довольно зрелым и, вероятно, предшествует многим современным методам кодирования. Кто-нибудь знает о каких-либо устаревших или устаревших методах, которые я должен искать? К какой кодировке относится Perl/по умолчанию, если разработчик не указывает направление?
Спасибо
Ответ №1:
По умолчанию Perl обрабатывает строки как последовательности байтов, поэтому, если вы прочитаете из файла и распечатаете его в STDOUT, он выдаст ту же последовательность байтов. Если ваши шаблоны являются латинскими-1, ваши выходные данные также будут латинскими-1.
Если вы используете строку в контексте текстовой строки (например , с uc
lc
и т. Д.), perl предполагает семантику Latin-1, если только строка не была декодирована ранее.
Ответ №2:
Perl ничего не предполагает, но браузер предполагает, что кодировка обычно основана на догадках. Документы выводятся непосредственно в том виде, в каком они были написаны, если не используется ни один из методов кодирования.
Вы можете указать кодировку в заголовке типа содержимого HTTP.
Ответ №3:
Первое, на что я бы посмотрел, — это конфигурация сервера. Если вы не задаете заголовок кодирования содержимого в программе, вы, скорее всего, принимаете предположение сервера.
Запустите сценарий отдельно от сервера, чтобы посмотреть, каков его фактический результат. Когда сервер получает вывод из программы CGI (это не nph), сервер исправляет заголовок для всего, что, по его мнению, отсутствует, прежде чем отправить его клиенту.
Ответ №4:
Если браузер сообщает содержимое как iso-8859-1, возможно, ваш скрипт perl не вывел правильные заголовки для указания кодировки?
Комментарии:
1. хм, я забыл упомянуть, что когда приложение создает страницу, оно указывает кодировку содержимого как iso-8859-1 в заголовках http. Я лучше уточню вопрос…
2. браузер предполагает, что кодировка в заголовке http верна, поэтому, если вы хотите вывести utf-8, вам также следует указать utf-8.