Exemplo n.º 1
0
    def resolve(self, context, text, expression):

        request = context.REQUEST

        charsets = getattr(request, '__zpt_available_charsets', None)
        if charsets is None:
            charsets = IUserPreferredCharsets(request).getPreferredCharsets()

            # add management_page_charset as one fallback
            management_charset = getattr(context, 'management_page_charset',
                                         None)
            if management_charset:
                charsets.append(management_charset)

            # add Python's default encoding as last fallback
            charsets.append(default_encoding)

            # cache list of charsets
            request.__zpt_available_charsets = charsets

        for enc in charsets:
            if enc == '*': continue

            try:
                return unicode(text, enc)
            except (LookupError, UnicodeDecodeError):
                pass

        return text