eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingkolejne pytanie z pythona › Re: kolejne pytanie z pythona
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.samoylyk.n
    et!weretis.net!feeder7.news.weretis.net!eternal-september.org!feeder.eternal-se
    ptember.org!reader01.eternal-september.org!.POSTED!not-for-mail
    From: Piotr Chamera <p...@p...onet.pl>
    Newsgroups: pl.comp.programming
    Subject: Re: kolejne pytanie z pythona
    Date: Wed, 15 Apr 2020 21:14:29 +0200
    Organization: A noiseless patient Spider
    Lines: 62
    Message-ID: <r77iu7$q51$1@dont-email.me>
    References: <d...@g...com>
    Mime-Version: 1.0
    Content-Type: text/plain; charset=utf-8; format=flowed
    Content-Transfer-Encoding: 8bit
    Injection-Date: Wed, 15 Apr 2020 18:14:31 -0000 (UTC)
    Injection-Info: reader02.eternal-september.org;
    posting-host="177ff2419742efb0783d7787b8aca387";
    logging-data="26785";
    mail-complaints-to="a...@e...org";
    posting-account="U2FsdGVkX1/o6bwhSp+ZVQIXZWA9xvGe"
    User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:68.0) Gecko/20100101
    Thunderbird/68.7.0
    Cancel-Lock: sha1:dkNyo/cX6D2xqO3zre/CGJ4OSl4=
    In-Reply-To: <d...@g...com>
    Content-Language: pl
    Xref: news-archive.icm.edu.pl pl.comp.programming:214855
    [ ukryj nagłówki ]

    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ń

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: