Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > pl.comp.programming > #33879
| From | Piotr Chamera <piotr_chamera@poczta.onet.pl> |
|---|---|
| Newsgroups | pl.comp.programming |
| Subject | Re: kolejne pytanie z pythona |
| Date | 2020-04-15 21:14 +0200 |
| Organization | A noiseless patient Spider |
| Message-ID | <r77iu7$q51$1@dont-email.me> (permalink) |
| References | <d5088c9e-aa2f-46b5-bca7-7c340b1618e6@googlegroups.com> |
W dniu 2020-04-15 o 02:58, fir pisze: > (...)> > jesli jest to decode to moge zapisywac wpisy na dysk i moge je czytac ze slowniek i wyswietlac na kanal - ale tylko poki nie zamkne bota i nie wczytam tego z dysku, wtedy przy probie odczytania wpisu i wyslania go na kanal z tego leci blad (ascii codect cant encode...) > > z kolei jak to decode wywale jest > odwrotnie, po uruchomieniu boyta moge > wysylac zapisane za poprzednim razem wpisy na kanal ale nie moge zapisac i odczytac nowego, tj dokladniej w pliku tez sie zapisuje ale odczytanie go ze slownika i proba poslania na kanal dale blad (ascii codec cant decode...) > > o co tu chodzi? jak to naprawic? Zwróć uwagę, że w pythonie 2.x są dwa rodzaje stringów: ośmiobitowe (bajtowe) i unikodowe, a z jednych na drugie przechodzisz przez encode() i decode(). Jeśli nie zachowasz dyscypliny i nie wiesz jakie kodowania masz w poszczególnych stringach bajtowych, to dzieją się „cuda” o których piszesz wyżej. przykład: Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec 5 2015, 20:40:30) [MSC v.1500 64 bit (AMD64)] on win32 >>> import sys >>> sys.stdin.encoding # sprawdzamy jakie jest domyślne kodowanie konsoli 'cp1250' >>> s1 = "aą" # zwykły ośmiobitowy string, kodowanie cp1250 >>> s2 = u"aą" # string unicode, automatycznie przekodowany z konsoli na unicode >>> s1 'a\xb9' >>> s2 u'a\u0105' s1 nie „pamięta” swojego kodowania, można go dowolnie zinterpretować >>> s1.decode(encoding="cp1250") u'a\u0105' >>> s1.decode(encoding="iso8859-2") u'a\u0161' >>> s1.decode(encoding="cp1256") u'a\xb9' s2 też można „spaprać”, jeśli się go przepuści przez niekompatybilne kodowania bajtowe, np.: >>> s2.encode(encoding="utf8").decode(encoding="cp1250") u'a\xc4\u2026' >>> print s2.encode(encoding="utf8").decode(encoding="cp1250") aÄ… Rozwiązanie problemu jest takie jak w innych językach: - znać kodowania wejściowe - dekodować wejścia do jednego wspólnego dla całej aplikacji kodowania (najczęściej unicode, ewentualnie utf-8) i na nim pracować - znać kodowania wyjściowe i wyjścia kodować odpowiednio do wymagań
Back to pl.comp.programming | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
kolejne pytanie z pythona fir <profesor.fir@gmail.com> - 2020-04-14 17:58 -0700
Re: kolejne pytanie z pythona fir <profesor.fir@gmail.com> - 2020-04-14 18:36 -0700
Re: kolejne pytanie z pythona godek.maciek@gmail.com - 2020-04-15 03:54 -0700
Re: kolejne pytanie z pythona fir <profesor.fir@gmail.com> - 2020-04-15 04:45 -0700
Re: kolejne pytanie z pythona godek.maciek@gmail.com - 2020-04-15 05:48 -0700
Re: kolejne pytanie z pythona fir <profesor.fir@gmail.com> - 2020-04-15 06:01 -0700
Re: kolejne pytanie z pythona godek.maciek@gmail.com - 2020-04-15 06:53 -0700
Re: kolejne pytanie z pythona fir <profesor.fir@gmail.com> - 2020-04-15 08:01 -0700
Re: kolejne pytanie z pythona Maciej Sobczak <see.my.homepage@gmail.com> - 2020-04-17 12:04 -0700
Re: kolejne pytanie z pythona Piotr Chamera <piotr_chamera@poczta.onet.pl> - 2020-04-15 21:14 +0200
Re: kolejne pytanie z pythona Piotr Chamera <piotr_chamera@poczta.onet.pl> - 2020-04-15 21:27 +0200
csiph-web