Plone doesn't seem to like ISO-8859-15
| Filed under: development, plone
After migrating a Plone 2.5 site to Plone 3, I got a UnicodeEncodeError when viewing the site.
Apparently the site was configured to use ISO-8859-15 as the default character set. However, plone.app.contentmenu.menu contains a class FactorySubMenuItem and the title property contains an ellipsis as unicode character:
_(u'label_add_new_item', default=u'Add new\u2026')
Rendering a page resulted in this error:
Traceback (innermost last):
Module ZPublisher.Publish, line 122, in publish
Module ZServer.HTTPResponse, line 262, in setBody
Module ZPublisher.HTTPResponse, line 327, in setBody
Module ZPublisher.HTTPResponse, line 482, in _encode_unicode
Module encodings.iso8859_15, line 18, in encode
UnicodeEncodeError: 'charmap' codec can't encode character u'\u2026' in position 10551: character maps to <undefined>
This ‘problem’ exist at least in version 1.1.7 and 2.0.1 of plone.app.contentmenu (and thus at least Plone 3.3.5 and 4.0.1).
Switching the encoding to UTF-8 solved the problem. (I also had to clear and rebuild the catalog by the way, a good tip from Maurits van Rees.) The funny thing is that the Plone migration set the default language from Dutch to English. Otherwise I would not even have noticed this issue: the translation for the label_add_new_item does not contain the ellipsis.
I cannot directly come up with a good reason to not use UTF-8 as the default character set for a Plone site. If you do know a reason, please leave a comment, I'd love to hear about it! Either way: beware of this issue.
Comments
There was never any official upgrade code that would convert databases with a different encoding to utf-8. So if you are dealing with really old Plone instances, you might need to write some code of your own.