# HG changeset patch # User cmlenz # Date 1183656313 0 # Node ID 6c8b69e150a982eba6f23c06d1815701dc64efe1 # Parent fdc2964b5cae2549b75cd719da0ab642e831a1b7 When parsing catalog headers, look for the content-type first, to be able to use a specified encoding on all other headers. diff --git a/babel/messages/catalog.py b/babel/messages/catalog.py --- a/babel/messages/catalog.py +++ b/babel/messages/catalog.py @@ -267,10 +267,17 @@ def _set_mime_headers(self, headers): for name, value in headers: - name = name.lower() + if name == 'content-type': + mimetype, params = parse_header(value) + if 'charset' in params: + self.charset = params['charset'].lower() + break + for name, value in headers: + name = name.lower().decode(self.charset) + value = value.decode(self.charset) if name == 'project-id-version': parts = value.split(' ') - self.project = ' '.join(parts[:-1]) + self.project = u' '.join(parts[:-1]) self.version = parts[-1] elif name == 'report-msgid-bugs-to': self.msgid_bugs_address = value @@ -288,10 +295,6 @@ int(tzoffset[2:])) dt = datetime.fromtimestamp(ts) self.creation_date = dt.replace(tzinfo=tzoffset) - elif name == 'content-type': - mimetype, params = parse_header(value) - if 'charset' in params: - self.charset = params['charset'].lower() mime_headers = property(_get_mime_headers, _set_mime_headers, doc="""\ The MIME headers of the catalog, used for the special ``msgid ""`` entry. @@ -403,7 +406,7 @@ flags = set() if self.fuzzy: flags |= set(['fuzzy']) - yield Message(u'', u'\n'.join(buf), flags=flags) + yield Message(u'', '\n'.join(buf), flags=flags) for key in self._messages: yield self._messages[key] diff --git a/babel/messages/frontend.py b/babel/messages/frontend.py --- a/babel/messages/frontend.py +++ b/babel/messages/frontend.py @@ -605,7 +605,7 @@ if options.list_locales: identifiers = localedata.list() longest = max([len(identifier) for identifier in identifiers]) - format = '%%-%ds %%s' % (longest + 1) + format = u'%%-%ds %%s' % (longest + 1) for identifier in localedata.list(): locale = Locale.parse(identifier) print format % (identifier, locale.english_name)