I18n issue with optik

Thorsten Kampe thorsten at thorstenkampe.de
Mon Apr 2 08:00:05 EDT 2007


* Leo Kislov (1 Apr 2007 14:24:17 -0700)
> On Apr 1, 8:47 am, Thorsten Kampe <thors... at thorstenkampe.de> wrote:
> > I guess the culprit is this snippet from optparse.py:
> >
> > # used by test suite
> > def _get_encoding(self, file):
> >     encoding = getattr(file, "encoding", None)
> >     if not encoding:
> >         encoding = sys.getdefaultencoding()
> >     return encoding
> >
> > def print_help(self, file=None):
> >     """print_help(file : file = stdout)
> >
> >     Print an extended help message, listing all options and any
> >     help text provided with them, to 'file' (default stdout).
> >     """
> >     if file is None:
> >         file = sys.stdout
> >     encoding = self._get_encoding(file)
> >     file.write(self.format_help().encode(encoding, "replace"))
> >
> > So this means: when the encoding of sys.stdout is US-ASCII, Optparse
> > sets the encoding to of the help text to ASCII, too.
> 
> .encode() method doesn't set an encoding. It encodes unicode text into
> bytes according to specified encoding. That means optparse needs ascii
> or unicode (at least) for help text. In other words you'd better use
> unicode throughout your program.
> 
> > But that's
> > nonsense because the Encoding is declared in the Po (localisation)
> > file.
> 
> For backward compatibility gettext is working with bytes by default,
> so the PO file encoding is not even involved. You need to use unicode
> gettext.

You mean

gettext.install('test', unicode = True)
    and
description = _(u'THIS SOFTWARE COMES WITHOUT WARRANTY, LIABILITY OR 
SUPPORT!') ?

If I modify my code like this, I don't get any traceback anymore, but 
the non-ascii umlauts are still displayed as question marks.


Thorsten



More information about the Python-list mailing list