Some information about locale (was Re: [Python-Dev] repr vs. str and locales again)

Guido van Rossum guido@python.org
Mon, 22 May 2000 09:54:35 -0700


> pf@pefunbk> python 
> Python 1.5.2 (#1, Jul 23 1999, 06:38:16)  [GCC egcs-2.91.66 19990314/Linux (egcs- on linux2
> Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
> >>> import string
> >>> print string.upper("ä")
> Ä
> >>> 

This threw me off too.  However try this:

python -c 'print "ä".upper()'

It will print "ä".  A mystery?  No, the GNU readline library calls
setlocale().  It is wrong, but I can't help it.  But it only affects
interactive use of Python.

> In recent Linux distributions almost every Linux C-program seems to 
> contain this obligatory 'setlocale(LC_ALL, "");' line, so it's easy 
> to forget about it.  However the core Python interpreter does not.
> it seems the Linux C-Library is not fully ANSI compliant in this case.
> It seems to honour the setting of $LANG regardless whether a program
> calls 'setlocale' or not.

No, the explanation is in GNU readline.

Compile this little program and see for yourself:

#include <ctype.h>
#include <stdio.h>

main()
{
	printf("toupper(%c) = %c\n", 'ä', toupper('ä'));
}

--Guido van Rossum (home page: http://www.python.org/~guido/)