Portál AbcLinuxu, 12. května 2025 09:24

Dotaz: python,cx_freeze,UnicodeEncodeError

19.9.2008 18:40 vepro
python,cx_freeze,UnicodeEncodeError
Přečteno: 995×
Odpovědět | Admin
Pratele,
Ve skriptu pouzivam prikaz print v takovemto formatu:

print unicode("konfigurační soubor: ","utf-8")

Skript funguje tak jak ma. Problem nastane az s binarkou, kterou vytvorim pomoci cx_freeze. Po spusteni binarky se vypise chyba:

UnicodeEncodeError: 'ascii' codec can't encode character u'\u010d' in position 9: ordinal not in range(128)

Vi nekdo jak odladit tento problem, krom vyhozeni ceskych znaku:))
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

19.9.2008 19:00 Boris Dušek | skóre: 22 | blog: everything
Rozbalit Rozbalit vše Re: python,cx_freeze,UnicodeEncodeError
Odpovědět | | Sbalit | Link | Blokovat | Admin
Myslím, že správně musítě na začátek python souboru vložit komentář ve tvaru # coding: utf-8 (popř. jiné kódování), který udává, v jakém kódování je samotný .py soubor (a tedy i všechny string literály, které tam přímo napíšete). Mám totiž dojem, že Python před verzí 3 má jako default ascii kódování. I když nevím, proč to pak teda v "normálním" Pythonu fungovalo.
vim ~/.emacs
19.9.2008 20:07 vepro
Rozbalit Rozbalit vše Re: python,cx_freeze,UnicodeEncodeError
Na zacatku skriptu mam

# -*- coding: utf8 -*

Jen sem to sem nenapsal.
19.9.2008 21:12 martin
Rozbalit Rozbalit vše Re: python,cx_freeze,UnicodeEncodeError
snad pomuze pri vytvareni binarky pridat modul codecs a radsi konkretne i uft8.
20.9.2008 14:59 vepro
Rozbalit Rozbalit vše Re: python,cx_freeze,UnicodeEncodeError
Odpovědět | | Sbalit | Link | Blokovat | Admin
jelikoz jsem se ptal i na konferenci py.cz. Prisla mi tato odpoved:

Slo o osetreni vystupu: Tedy za znalosti kodovani, ktere zvlada zobrazit terminal, na kterem skript bezi upravte skript takto: print unicode("konfigurační soubor: ","utf-8").encode("utf-8") pokud mate na zacatku skriptu definovane kodovani zdrojaku, melo by stacit toto: print u"konfigurační soubor".encode("utf-8")

Je to urcite dobra cesta, avsak nefunguji mi konstrukty typu:
print u"data v konfiguračním souboru %s jsou ve špatném formátu ".encode("utf-8") %(self.path)

chybova hlaska (v nativnim pythonovskem skriptu, ne ve zmrazenem!!!):
Traceback (most recent call last):
  File "run_BastControl_v1.py", line 183, in iniLoad
    self.loadIniStatus=self.conf.read(self)
  File "/home/vepro/vlrz/conf_BastlControl_v1.py", line 25, in read
    print u"data v konfiguračním souboru %s jsou ve špatném formátu ".encode("utf-8") %(self.path)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 11: ordinal not in range(128)

konstrukty toho typu (bez formatovaciho retezce %s):
print u"přidávám větev do databáze".encode("utf-8")

Funguji spravne. Vi nekdo jak odladit i toto?
20.9.2008 18:10 martin
Rozbalit Rozbalit vše Re: python,cx_freeze,UnicodeEncodeError
ja vim ze kdyz jsem se kdysi pokousel neco delat pomoci cx_freeze pouzival jsem parametr --include-modules=codecs,codecs.utf-8
delal jsem to z radky bez setup souboru, pak vse fungovalo.
20.9.2008 18:56 vepro
Rozbalit Rozbalit vše Re: python,cx_freeze,UnicodeEncodeError
ImportError: No "module named codecs.utf-8

Nezna zadny modul codecs.utf-8 a pouze s codecs se nic nezmeni
Fuky avatar 20.9.2008 18:56 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: python,cx_freeze,UnicodeEncodeError

print unicode("data v konfiguračním souboru %s jsou ve špatném formátu ", "utf-8").encode("utf-8") %(self.path)

Mrkni se na Unicode HOWTO.

20.9.2008 20:03 vepro
Rozbalit Rozbalit vše Re: python,cx_freeze,UnicodeEncodeError
to mi teda moc nepomohlo
Fuky avatar 20.9.2008 20:13 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: python,cx_freeze,UnicodeEncodeError

Zamyslíme se nad významem hlášky:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 11: ordinal not in range(128)

Vzhledem k tomu, že na 11 pozici v řetězci není žádný nekorektní znak, tak bude nejspíš v self.path. Jaký řetězec obsahuje tato proměná? Když ho také předáš fci unicode, mělo by to šlapat:

unicode(self.path, "utf-8").encode("utf-8")

20.9.2008 21:02 vepro
Rozbalit Rozbalit vše Re: python,cx_freeze,UnicodeEncodeError
jj zamyslel jsem se...a neco podobneho jsem udelal. Takze ve vysledku:
print u"konfigurační soubor %s nenalezen ".encode("utf8") %self.path.encode("utf8")

Python to schroupe, avsak opet problem s freeze, repsektive uz se spusteni binarky:
Traceback (most recent call last):
  File "/usr/lib/cx_Freeze/initscripts/Console.py", line 27, in module>
    exec code in m.__dict__
  File "run_BastControl_v1.py", line 194, in module>
  File "run_BastControl_v1.py", line 22, in __init__
  File "conf_BastlControl_v1.py", line 14, in read
LookupError: unknown encoding: utf8

Fuky avatar 20.9.2008 21:18 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: python,cx_freeze,UnicodeEncodeError
Fuky avatar 20.9.2008 18:44 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: python,cx_freeze,UnicodeEncodeError
Odpovědět | | Sbalit | Link | Blokovat | Admin
Provázání s Konferencí Python, vlákno [python] freeze,kodovani...
-- RÁMO: psí tábor , ETriatlon: Výuka plavání

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.