[Zope-dev] UnicodeDecodeError from PageTemplate rendering after upgrading to Zope 2.12.7

Charlie Clark charlie.clark at clark-consulting.eu
Tue Aug 31 07:08:18 EDT 2010


Am 31.08.2010, 12:51 Uhr, schrieb Chris Withers <chris at simplistix.co.uk>:

> Any idea what I should be looking for and in what changelog?

This my horribly patched version of charset.py which we just use via an  
override. I know it's wrong but it was the easiest thing to do at a time.

class HTTPCharsets(object):
     """This is a complete copy of zope.publisher.http.HTTPCharset
     except if there is no charset specified. Zope defaults to
     ISO-8859-1 and we use the portal default_charset"""
     adapts(IHTTPRequest)
     implements(IUserPreferredCharsets)

     def __init__(self, request):
         self.request = request

     def getPreferredCharsets(self):
         '''See interface IUserPreferredCharsets'''
         charsets = []
         sawstar = sawiso88591 = 0
         header_present = 'HTTP_ACCEPT_CHARSET' in self.request
         for charset in self.request.get('HTTP_ACCEPT_CHARSET',  
'').split(','):
             charset = charset.strip().lower()
             if charset:
                 if ';' in charset:
                     charset, quality = charset.split(';')
                     if not quality.startswith('q='):
                         # not a quality parameter
                         quality = 1.0
                     else:
                         try:
                             quality = float(quality[2:])
                         except ValueError:
                             continue
                 else:
                     quality = 1.0
                 if quality == 0.0:
                     continue
                 if charset == '*':
                     sawstar = 1
                 if charset == 'iso-8859-1':
                     sawiso88591 = 1
                 charsets.append((quality, charset))
         # Quoting RFC 2616, $14.2: If no "*" is present in an  
Accept-Charset
         # field, then all character sets not explicitly mentioned get a
         # quality value of 0, except for ISO-8859-1, which gets a quality
         # value of 1 if not explicitly mentioned.
         # And quoting RFC 2616, $14.2: "If no Accept-Charset header is
         # present, the default is that any character set is acceptable."
         if not sawstar and not sawiso88591 and header_present:
             ptool = getUtility(IPropertiesTool)
             default_charset = ptool.getProperty('default_charset', None)
             charsets.append((1.0, default_charset))
             # charsets.append((1.0, 'iso-8859-1'))
         # UTF-8 is **always** preferred over anything else.
         # Reason: UTF-8 is not specific and can encode the entire unicode
         # range , unlike many other encodings. Since Zope can easily use  
very
         # different ranges, like providing a French-Chinese dictionary, it  
is
         # always good to use UTF-8.
         # charsets.sort(sort_charsets)
         charsets = [charset for quality, charset in charsets]
         if sawstar and charsets[0] != 'utf-8':
             if 'utf-8' in charsets:
                 idx = charsets.index('utf-8')
                 del charsets[idx]
             charsets.insert(0, 'utf-8')
         return charsets

The related bug in zope.publisher may or may not have found its way into  
the current release.

https://bugs.launchpad.net/zope2/+bug/143873

In addition, but I don't know how relevant this is in your case, Jens  
improved FSPageTemplate

https://bugs.launchpad.net/zope-cmf/+bug/322263

Charlie
-- 
Charlie Clark
Managing Director
Clark Consulting & Research
German Office
Helmholtzstr. 20
Düsseldorf
D- 40215
Tel: +49-211-600-3657
Mobile: +49-178-782-6226


More information about the Zope-Dev mailing list