|
Обработка unicode
В Zope 2.6.0 появилась обработка unicode через ZMI, что выразилось в появлении
новых типов свойств : ustring, utext, ulines и utokens. К сожалению, правка введенная
в связи с этим (видимо) в ZMI приятно разочарует русских пользователей.
Подробности в исходном
коде, если кратко:
- Для всех страниц ZMI явно устанавливается кодировка ISO8859-1 - через
HTTP-заголовок и через тег , бороться с этим можно создав в корне
Zope свойство management_page_charset типа string и со значением, равным
предпочитаемой кодировке, но проблемы пункта 2 это не решит;
- Страница управления свойствами (manage_propertiesForm), отдается
в кодировке UTF8 - отчасти это логично, в связи с появлением свойств
типа ustring, ulist, utext, utoken, но не логично то, как это сделано. И вообще-то
я не считаю хорошим стилем лишать пользователя выбора без достаточной на то
необходимости;
- При обработке REQUEST в ZPublisher в нескольких местах в качестве умолчания
для кодировки строк жестко прописано latin-1. Вообще-то стоит брать это значение
из установок локали. В результате в некоторых случаях обращение к серверу может
приводить к исключениям в обработке UNICODE, в частности, в довольно печальной
ситуации оказываются люди, ранее державшие свойства в KOI8-R / string и запускавшие
сервер, соответственно с -L ru_RU.KOI8-R : через страницу свойств они сохранить
эти свойства более не могут. Учитывая то, что в число этих свойств попало свойство title я
вообще не знаю что они будут делать.
Для решения этих проблем я написал патч к Zope, который проверен исключительно в комбинации
python2.2 + Zope 2.6.0, и в любом случае является лишь предварительным и не до конца проверенным
решением. Подробности опять же в исходном коде, если кратко :
- Все умолчания для кодировки теперь берутся исходя из локали с которой стартован сервер. Соответственно
для локали ru_RU.KOI8-R для ZMI будут устанавливаться заголовки кодировке koi8-r, это
по-прежнему можно перекрыть установкой переменной management_page_charset.
- Страница manage_propertiesForm теперь отображается в той же кодировке что и остальной сервер,
а не в UTF8, что абсолютно не мешает вводить свойства ustring, utext, ulist, utokens - проблема будет
только в том случае, если вы хотите работать с многоязычными свойствами (немецкий+русский, например),
тогда запускаете сервер в локали ru_RU.UTF-8 - и работаете с utf не-по-детски ;)
- ZPublisher и разбор REQUEST - с этим патчем накопленный запас данных не придется срочно
переписывать и перекодировать, при старте с той-же локалью что и раньше вы даже не заметите
что что-то произошло (разумеется, локаль должна соответствовать языку, товарищам, работавшим
в локали en_US и писавшим свойства, тексты и что-либо еще по-русски я искренне сочувствую, кстати,
подавляющее большинство жалоб пользователей на неработоспособность ZCatalog & StructuredText
объясняются именно этим);
Конструктивные отзывы и предложения по предлагаемому пачу крайне приветствуются,
неконструктивные (типа "переходите все на UTF8" прочитаны и отвечены не будут (тем более
что такой переход не решит проблему)).
- Примечание
- Если кто-то использует CrayFIX - снесите его прежде чем ставить Zope-2.6.0 и тем более
этот патч : последствия плохо предсказуемы, ничего страшного не произойдет но работать не будет ни то,
ни другое. Тем более что та часть вводимой им функциональности, ради которой его обычно ставят, теперь
вошла в основной код Zope ;( То же самое относится ко всем иным продуктам, перекрывающим
manage_page_header.
|