python UnicodeEncodeError ?

Mateusz Korniak mateusz w ant.gliwice.pl
Czw, 6 Paź 2005, 09:02:17 CEST


On Thursday 06 of October 2005 02:17, Jakub Piotr Cłapa wrote:
> Jakub Krajniak wrote:
> > Witam,
> > w dwóch programach jak na razie dostaje następujące błędy:
> > [teodor w server src]$ quodlibet --help
> > Traceback (most recent call last):
> >   File "/usr/bin/quodlibet", line 221, in ?
> >     process_arguments()
> >   File "/usr/bin/quodlibet", line 162, in process_arguments
> >     opts, args = options.parse()
> >   File "/usr/lib/quodlibet/quodlibet.zip/util.py", line 119, in parse
> >   File "/usr/share/python2.4/encodings/iso8859_2.py", line 18, in encode
> > UnicodeEncodeError: 'charmap' codec can't encode character u'\xb7' in
> > position 28: character maps to <undefined>
> > [to z quodlibet --help]

> > a to z mojego programiku, który działał wcześniej (nie wiem przed jakim
> > to wydarzeniem działał):
> > media name: Human 12
> > Try to add Ewelina Flinta  - Dziwny Jest Ten Świat (Koncert).mp3:
> > (Dziwny Jest Ten Świat (Koncert)) title:
> > (Ewelina Flinta) artist:
> > album:
> > Traceback (most recent call last):
> >   File "./mp3kat.py", line 10, in ?
> >     interface.cmdloop()
> >   File "/usr/share/python2.4/cmd.py", line 142, in cmdloop
> >   File "/usr/share/python2.4/cmd.py", line 219, in onecmd
> >   File
> > "/home/users/teodor/project/python/mp3kat/src/mp3kat/cInterface.py",
> > line 51, in do_add_media
> >     self.cmd.add_media(cd_name,path)
> >   File
> > "/home/users/teodor/project/python/mp3kat/src/mindexer/cCommand.py",
> > line 45, in add_media
> >   File "/home/users/teodor/project/python/mp3kat/src/mp3kat/mp3kat.py",
> > line 50, in add_entry
> >     title = unicode(title)
> > UnicodeDecodeError: 'ascii' codec can't decode byte 0xa6 in position 16:
> > ordinal not in range(128)

Skoro to Twój program to konieczna lekka poprawka.
unicode() traktuje argument jako string w aktualnym kodowaniu (ustawionym 
przez locale).
Przypuszczalnie title masz zakodowane w iso więc użyj:
title = title.decode("iso8859-2")

> > jakieś takie podobne błędy wyskakują, pytanie, czy czegoś mi brakuje w
> > systemie czy też mam coś zaktualizować? Zrobiłem już upgrade pythona do
> > 2.4.2 za ac-main.
>
> Może do AC poszedł Python, w którym wywalona została łatka powodująca
> niedeterministyczne zachowanie Pythona (czyli koercję Unicode z i do
> encoding wziętego z aktualnego locale). 

E-e. Zachowanie jest jak najbardziej deterministyczne - str/locale po prostu 
używają ustawień z locale. Tak stanowi std Pythona. 
Jeśli była łatka która coś tutaj zmieniała to b. dobrze że wyleciała.

> Prawdopodobnie programiki do 
> poprawki (muszą explicite wybierać kodowanie z jakiego chcą korzystać,
> bo domyślnie jest ascii).

Dokładnie tak z poprawką że domyślnie jest z locale.

-- 
Mateusz Korniak
"Black holes are where God divided by zero." - Steven Wright



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