# HG changeset patch # User cmlenz # Date 1183656313 0 # Node ID 2c00a52bc073c18840c7974db578d86afb4a9b89 # Parent 9d102737797c16cfe07fd2bcbbeec9cd3b0a09be 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)