Python, locale i unicode

Artur Frysiak wiget w pld.org.pl
Śro, 5 Gru 2001, 12:20:06 CET


On Wed, Nov 07, 2001 at 06:17:29PM +0100, Jacek Konieczny wrote:
> Witam,
> 
> Właśnie pisze programik w pythonie, który będzie wykożystywał Unicode.
> No i znalazłem taki "kwiatek" w /usr/lib/python2.1/site.py:
> 
> #v+
> # Set the string encoding used by the Unicode implementation.  The
> # default is 'ascii', but if you're willing to experiment, you can
> # change this.
> 
> encoding = "ascii" # Default value set by _PyUnicode_Init()
> 
> if 0:
>     # Enable to support locale aware default string encodings.
>     import locale
>     loc = locale.getdefaultlocale()
>     if loc[1]:
>         encoding = loc[1]
> 
> if 0:
>     # Enable to switch off string to Unicode coercion and implicit
>     # Unicode to string conversion.
>     encoding = "undefined"
> #v-
> 
> To są ustawienia domyślne. Później ten "encoding" jest ustawiany przez
> sys.setdefaultencoding(), a funkcja sys.setdefaultencoding() jest
> usuwane.
> 
> W skrócie: domyślnie python przy kodowaniu/dekodowaniu Unicode olewa
> locale i się wykrzaczy przy próbie przekodowania do/z Unicode
> jakiegokolwiek znaku spoza ASCII.
> Żeby było śmieszniej programy w pythonie nie mają żadnej możliwości
> zmienić tego. :-(
> 
> IMHO warto byłoby to zmienić. Jeśli nikt nie widzi przeciwskazań zrobię
> patcha i wrzuce do CVS. Zajżałem do FAQ i tam nawet jest napisane żeby
> to zmienić jak wyskakuje UnicodeError. Nie rozumiem tylko czemu
> domyślnie jest tak jak jest...

No i właśnie się natknąłem na problem z tym o czym piszesz.
Gdy próbuje użyć unicodowego stringu jako wxString w wxPython
to jest on przekodowywany przy pomocy PyString_AsStringAndSize z użyciem
domyślnego kodowania.
A że domyślne jest ustawiane jak mówisz to nie działa to dobrze.

Pozdrawiam
-- 
Artur Frysiak
http://www.pld.org.pl/



Więcej informacji o liście dyskusyjnej pld-devel-pl