ďťż
 
cxFreeze a unicode ďťż
 
cxFreeze a unicode
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

cxFreeze a unicode



koval - 24-12-2006 00:55
cxFreeze a unicode
  Czy ktos z Was uzywa cxFreeze na Linuksie ?
Chcialem to 'cos' wyprobowac i napisalem krotki tescik.py :

# -*- coding: utf-8 -*-
a=u'>> aA \u00f3\u0118\u017B zZ <<'
print type(a),'=',a
b=a.encode('latin2')
print type(b),'=',b
c=b.decode('latin2')
print type(c),'=',c

interpreter Python'a wykonuje go jak najbardziej OK.

nastepnie pisze:
FreezePython --install-dir dist tescik.py
wchodze do utworzonego katalogu dist i uruchamiam:
../tescik
w rezultacie dostaje :
....../cx_Freeze-3.0.3/initscripts/Console.py", line 27, in ?
exec code in m.__dict__
File "tescik.py", line 3, in ?
UnicodeEncodeError: 'ascii' codec can't encode characters in position
6-8: ordinal not in range(128)

blad w cxFreeze, czy ja cos robie zle ?





Rob Wolfe - 24-12-2006 00:55

 
koval napisał(a):

> blad w cxFreeze, czy ja cos robie zle ?

Metody encode i decode tak naprawdę korzystają z dodatkowych
modułów w pakiecie encodings (w tym przypadku utf_8 i iso8559_2).
Niestety biedny freeze o tym nie wie, więc dorzuć te importy:

import encodings.utf_8
import encodings.iso8859_2

--
pozdrawiam
Rob




Grzegorz Makarewicz - 24-12-2006 00:55

  koval wrote:
> Czy ktos z Was uzywa cxFreeze na Linuksie ?
> Chcialem to 'cos' wyprobowac i napisalem krotki tescik.py :
>
> # -*- coding: utf-8 -*-
> a=u'>> aA \u00f3\u0118\u017B zZ <<'
> print type(a),'=',a
> b=a.encode('latin2')
> print type(b),'=',b
> c=b.decode('latin2')
> print type(c),'=',c
>
> interpreter Python'a wykonuje go jak najbardziej OK.
>
> nastepnie pisze:
> FreezePython --install-dir dist tescik.py
> wchodze do utworzonego katalogu dist i uruchamiam:
> ./tescik
> w rezultacie dostaje :
> ...../cx_Freeze-3.0.3/initscripts/Console.py", line 27, in ?
> exec code in m.__dict__
> File "tescik.py", line 3, in ?
> UnicodeEncodeError: 'ascii' codec can't encode characters in position
> 6-8: ordinal not in range(128)
>
> blad w cxFreeze, czy ja cos robie zle ?
>

python2.4 xx.py
<type 'unicode'> = Traceback (most recent call last):
File "xx.py", line 3, in ?
print type(a),'=',a
UnicodeEncodeError: 'ascii' codec can't encode characters in position
6-8: ordinal not in range(128)

frezujesz jednym pythonem, a wykonujesz pod innym

mak




koval - 24-12-2006 00:55

  Grzegorz Makarewicz wrote:
> frezujesz jednym pythonem, a wykonujesz pod innym
>
> mak

nie nadazam , moze troche jasniej ? :)
wydawalo mi sie, ze do wykonywania python nie jest juz potrzebny (?)
poza tym wszystko dzieje sie na 1 maszynie gdzie jest tylko jedna
instalacja pythona (2.4)





koval - 24-12-2006 00:55

  Rob Wolfe wrote:
> koval napisał(a):
>
>> blad w cxFreeze, czy ja cos robie zle ?
>
> Metody encode i decode tak naprawdę korzystają z dodatkowych
> modułów w pakiecie encodings (w tym przypadku utf_8 i iso8559_2).
> Niestety biedny freeze o tym nie wie, więc dorzuć te importy:
>
> import encodings.utf_8
> import encodings.iso8859_2
>
dziekuje za pomoc , ale nie pomoglo :(




Rob Wolfe - 24-12-2006 00:55

 
koval napisał(a):
> Rob Wolfe wrote:
> > koval napisał(a):
> >
> >> blad w cxFreeze, czy ja cos robie zle ?
> >
> > Metody encode i decode tak naprawdę korzystają z dodatkowych
> > modułów w pakiecie encodings (w tym przypadku utf_8 i iso8559_2).
> > Niestety biedny freeze o tym nie wie, więc dorzuć te importy:
> >
> > import encodings.utf_8
> > import encodings.iso8859_2
> >
> dziekuje za pomoc , ale nie pomoglo :(

Masz dokładnie taki sam błąd?
W komunikatach freeze'a widać było, że dodaje te moduły?

Dodaj do skryptu:
import sys
print sys.stdout.encoding
print sys.getdefaultencoding()

i pokaż co tam siedzi.

--
pozdrawiam
Rob




Rob Wolfe - 24-12-2006 00:55

 
Rob Wolfe napisał(a):
> koval napisał(a):
> > Rob Wolfe wrote:
> > > koval napisał(a):
> > >
> > >> blad w cxFreeze, czy ja cos robie zle ?
> > >
> > > Metody encode i decode tak naprawdę korzystają z dodatkowych
> > > modułów w pakiecie encodings (w tym przypadku utf_8 i iso8559_2).
> > > Niestety biedny freeze o tym nie wie, więc dorzuć te importy:
> > >
> > > import encodings.utf_8
> > > import encodings.iso8859_2
> > >
> > dziekuje za pomoc , ale nie pomoglo :(
>
> Masz dokładnie taki sam błąd?
> W komunikatach freeze'a widać było, że dodaje te moduły?
>
> Dodaj do skryptu:
> import sys
> print sys.stdout.encoding
> print sys.getdefaultencoding()
>
> i pokaż co tam siedzi.

I jeszcze zmodyfikuj swój skrypt w ten sposób:

print type(a),'=', repr(a)
b=a.encode('latin2')
print type(b),'=', repr(b)
c=b.decode('latin2')
print type(c),'=', repr(c)

to będziemy mieli pełną jasność.

--
pozdrawiam
Rob




Piotr Duda - 24-12-2006 00:55

  koval napisał(a):
> Czy ktos z Was uzywa cxFreeze na Linuksie ?
> Chcialem to 'cos' wyprobowac i napisalem krotki tescik.py :
>
> # -*- coding: utf-8 -*-
> a=u'>> aA \u00f3\u0118\u017B zZ <<'
> print type(a),'=',a
> b=a.encode('latin2')
> print type(b),'=',b
> c=b.decode('latin2')
> print type(c),'=',c
>
> interpreter Python'a wykonuje go jak najbardziej OK.
>
> nastepnie pisze:
> FreezePython --install-dir dist tescik.py
> wchodze do utworzonego katalogu dist i uruchamiam:
> ./tescik
> w rezultacie dostaje :
> ...../cx_Freeze-3.0.3/initscripts/Console.py", line 27, in ?
> exec code in m.__dict__
> File "tescik.py", line 3, in ?
> UnicodeEncodeError: 'ascii' codec can't encode characters in position
> 6-8: ordinal not in range(128)
>
> blad w cxFreeze, czy ja cos robie zle ?

Zaznaczam że nie znam się na cxfreeze, ale tu mi wygląda na to że nie
jest poprawnie (albo wcale) ustawione kodowanie stdout.
Wrzuć na początek skryptu coś takiego:
Kod: import sys
print sys.stdout.encoding Jeśli rzuci wyjątek to znaczy że kodowanie nie jest ustawione, jeśli
wypisze "ascii" to znaczy że kodowanie jest ustawione na ascii.

W obu przypadkach doraźnym rozwiązaniem może być ustawienie
sys.stdout.encoding na kodowanie które masz na konsoli (to co podałem
wcześniej wypisze to kodowanie jeśli uruchomisz za pomocą interpretera
pythona) .

--
Piotr Duda
"Inochi wa sutete mo Otoko wo suteru ki wa nakatta wai!"




koval - 24-12-2006 00:55

  OK, tescik.py wyglada teraz tak:

# -*- coding: utf-8 -*-

import encodings.utf_8
import encodings.iso8859_2
import sys

print "stdout.encodifg=",sys.stdout.encoding
print "getdefaultencoding=",sys.getdefaultencoding()

a=u'>> aA \u00f3\u0118\u017B zZ <<'

print type(a),'=', repr(a)
b=a.encode('latin2')
print type(b),'=', repr(b)
c=b.decode('latin2')
print type(c),'=', repr(c)

Uruchomienie z interpretera daje :
stdout.encodifg= ISO-8859-2
getdefaultencoding= ascii
<type 'unicode'> = u'>> aA \xf3\u0118\u017b zZ <<'
<type 'str'> = '>> aA \xf3\xca\xaf zZ <<'
<type 'unicode'> = u'>> aA \xf3\u0118\u017b zZ <<'

Uruchomienie po "zfreezowaniu" daje:
stdout.encodifg= None
getdefaultencoding= ascii
<type 'unicode'> = u'>> aA \xf3\u0118\u017b zZ <<'
<type 'str'> = '>> aA \xf3\xca\xaf zZ <<'
<type 'unicode'> = u'>> aA \xf3\u0118\u017b zZ <<'

ciekawe, prawda ?




Grzegorz Makarewicz - 24-12-2006 00:55

  koval wrote:
> Grzegorz Makarewicz wrote:
>> frezujesz jednym pythonem, a wykonujesz pod innym
>>
>> mak
>
> nie nadazam , moze troche jasniej ? :)
> wydawalo mi sie, ze do wykonywania python nie jest juz potrzebny (?)
> poza tym wszystko dzieje sie na 1 maszynie gdzie jest tylko jedna
> instalacja pythona (2.4)
>

Ten pierwszy wiersz ( # -*- coding: utf-8 -*-) jest rozpoznawany przez
interpreter pythona, wtedy na potrzebe skryptu jest robionych troche
zmian, freeze pewno o nim zapomnialo.

Jak odpalilem Twoj skrypt w py2.4 na konsoli bez ustawionego locale - to
wlasnie sie wykrzaczyl na pokazaniu "print type(a),'=',a", a szczegolnie
wartosci a.
Czyli sys.stdout.encoding == ascii, a nie utf-8

mak




Rob Wolfe - 24-12-2006 00:55

  koval <koval@USUN_TOkonto.pl> writes:

> ciekawe, prawda ?

Arcyciekawe. :) Sytuacja jest nieco złożona.
Domyślnie kodowanie ustawiane jest na "ascii", co pokazuje
sys.getdefaultencoding().
Zmienić je można w module site.py lub sitecustomize.py, które ładowane
są zawsze przy odpalaniu skryptów przy pomocy interpretera.
W przypadku freeze musimy to kodowanie ustawić samodzielnie w skrypcie.
A trzeba to zrobić tak:

try:
sys.setdefaultencoding("iso-8859-2") # kodowanie w systemie
except AttributeError:
pass

Gdy skrypt będzie odpalany przez interpreter, to wyskoczy wyjątek,
ponieważ w module site.py metoda setdefaultencoding jest usuwana.
Dlatego trzeba to obudować.

Po zamrożeniu moduł sys będzie nadal posiadał metodę setdefaultencoding,
bo site.py nie będzie ładowane i dzięki temu możemy ustawić kodowanie.

--
pozdrawiam
Rob




koval - 24-12-2006 00:55

  Rob Wolfe wrote:
> A trzeba to zrobić tak:
>
> try:
> sys.setdefaultencoding("iso-8859-2") # kodowanie w systemie
> except AttributeError:
> pass
>
BINGO!!

I to jest to!
Wielkie dzieki, klaniam sie nisko :))

pozdrawiam,
Grzegorz
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    MS SQL unicode i funkcja replace() Jak wyswietlic numer UNICODE podanego stringa? [Oracle9] - Dane w UNICODE (cyrylica) txt unicode -> jpg RGB -> YCrCb -> RGB [MySql] prosta statystyka dzienna baza danych *.sg specyficzny top-ten pierwszy lay ;] ostrzezenie o zabezpieczeniach
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • marcelq.xlx.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com