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