Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > pl.comp.programming > #29040 > unrolled thread
| Started by | Roman Tyczka <noemail@because.no> |
|---|---|
| First post | 2016-10-06 09:46 +0200 |
| Last post | 2016-10-06 11:50 +0200 |
| Articles | 11 — 3 participants |
Back to article view | Back to pl.comp.programming
python i stringi Roman Tyczka <noemail@because.no> - 2016-10-06 09:46 +0200
Re: python i stringi godek.maciek@gmail.com - 2016-10-06 01:10 -0700
Re: python i stringi Roman Tyczka <noemail@because.no> - 2016-10-06 10:19 +0200
Re: python i stringi godek.maciek@gmail.com - 2016-10-06 01:32 -0700
Re: python i stringi Roman Tyczka <noemail@because.no> - 2016-10-06 10:44 +0200
Re: python i stringi Piotr Chamera <piotr_chamera@poczta.onet.pl> - 2016-10-06 12:14 +0200
Re: python i stringi Roman Tyczka <noemail@because.no> - 2016-10-06 12:32 +0200
Re: python i stringi Piotr Chamera <piotr_chamera@poczta.onet.pl> - 2016-10-06 13:22 +0200
Re: python i stringi Piotr Chamera <piotr_chamera@poczta.onet.pl> - 2016-10-06 10:57 +0200
Re: python i stringi Roman Tyczka <noemail@because.no> - 2016-10-06 11:22 +0200
Re: python i stringi Piotr Chamera <piotr_chamera@poczta.onet.pl> - 2016-10-06 11:50 +0200
| From | Roman Tyczka <noemail@because.no> |
|---|---|
| Date | 2016-10-06 09:46 +0200 |
| Subject | python i stringi |
| Message-ID | <19jwk9uqtvyxa.dlg@tyczka.com> |
Witam, Używam czasami pythonowej konsoli jako kalkulatora, teraz zapragnąłem policzyć md5 unicodowego stringa, jednak nie znam pythona jeszcze zbytnio i się zawiesiłem: >>> import hashlib >>> ustr = u"Jeszcze dłuższy i bardzo długi string z ółęść oraz ;%$#@[ i innymi znakami 0099786764553 na końcu" >>> type(ustr) <type 'unicode'> >>> hashlib.md5(ustr).hexdigest() Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeEncodeError: 'ascii' codec can't encode character u'\u0142' in position 9: ordinal not in range(128) Jak wybrnąć i policzyć jednak tego hasha? ps. python 2.7.9 na windows -- pozdrawiam Roman Tyczka
[toc] | [next] | [standalone]
| From | godek.maciek@gmail.com |
|---|---|
| Date | 2016-10-06 01:10 -0700 |
| Message-ID | <c6b8c3a0-596d-445b-9951-5c16248b11b9@googlegroups.com> |
| In reply to | #29040 |
W dniu czwartek, 6 października 2016 09:46:26 UTC+2 użytkownik Roman Tyczka napisał: > Witam, > > Używam czasami pythonowej konsoli jako kalkulatora, teraz zapragnąłem > policzyć md5 unicodowego stringa, jednak nie znam pythona jeszcze zbytnio i > się zawiesiłem: > > >>> import hashlib > >>> ustr = u"Jeszcze dłuższy i bardzo długi string z ółęść oraz ;%$#@[ i innymi znakami 0099786764553 na końcu" > >>> type(ustr) > <type 'unicode'> > >>> hashlib.md5(ustr).hexdigest() > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > UnicodeEncodeError: 'ascii' codec can't encode character u'\u0142' in > position 9: ordinal not in range(128) > > Jak wybrnąć i policzyć jednak tego hasha? > > ps. python 2.7.9 na windows może np. google python unicode to ascii
[toc] | [prev] | [next] | [standalone]
| From | Roman Tyczka <noemail@because.no> |
|---|---|
| Date | 2016-10-06 10:19 +0200 |
| Message-ID | <zdk42d2gkady.dlg@tyczka.com> |
| In reply to | #29041 |
On Thu, 6 Oct 2016 01:10:29 -0700 (PDT), godek.maciek@gmail.com wrote: >>>>> ustr = u"Jeszcze dłuższy i bardzo długi string z ółęść oraz ;%$#@[ i innymi znakami 0099786764553 na końcu" >>>>> type(ustr) >> <type 'unicode'> >>>>> hashlib.md5(ustr).hexdigest() >> Traceback (most recent call last): >> File "<stdin>", line 1, in <module> >> UnicodeEncodeError: 'ascii' codec can't encode character u'\u0142' in >> position 9: ordinal not in range(128) >> >> Jak wybrnąć i policzyć jednak tego hasha? >> >> ps. python 2.7.9 na windows > > może np. google python unicode to ascii Po pierwsze nie da się konwertować unicode do ascii. Poza tym ja nic nie chcę konwertować, chcę by był potraktowany jako unicodowy właśnie, czyli de facto dwubajtowy znak. -- pozdrawiam Roman Tyczka
[toc] | [prev] | [next] | [standalone]
| From | godek.maciek@gmail.com |
|---|---|
| Date | 2016-10-06 01:32 -0700 |
| Message-ID | <aba1993f-ebae-4a5c-88d3-42b46e803a3a@googlegroups.com> |
| In reply to | #29042 |
W dniu czwartek, 6 października 2016 10:19:26 UTC+2 użytkownik Roman Tyczka > >>>>> ustr = u"Jeszcze dłuższy i bardzo długi string z ółęść oraz ;%$#@[ i innymi znakami 0099786764553 na końcu" > >>>>> type(ustr) > >> <type 'unicode'> > >>>>> hashlib.md5(ustr).hexdigest() > >> Traceback (most recent call last): > >> File "<stdin>", line 1, in <module> > >> UnicodeEncodeError: 'ascii' codec can't encode character u'\u0142' in > >> position 9: ordinal not in range(128) > >> > >> Jak wybrnąć i policzyć jednak tego hasha? > >> > >> ps. python 2.7.9 na windows > > > > może np. google python unicode to ascii > > Po pierwsze nie da się konwertować unicode do ascii. > > Poza tym ja nic nie chcę konwertować, chcę by był potraktowany jako > unicodowy właśnie, czyli de facto dwubajtowy znak. to może google python unicode to bytes python bytes to string python md5 unicode
[toc] | [prev] | [next] | [standalone]
| From | Roman Tyczka <noemail@because.no> |
|---|---|
| Date | 2016-10-06 10:44 +0200 |
| Message-ID | <8uxdbqmk73pz.dlg@tyczka.com> |
| In reply to | #29043 |
On Thu, 6 Oct 2016 01:32:07 -0700 (PDT), godek.maciek@gmail.com wrote:
> W dniu czwartek, 6 października 2016 10:19:26 UTC+2 użytkownik Roman Tyczka
>>>>>>> ustr = u"Jeszcze dłuższy i bardzo długi string z ółęść oraz ;%$#@[ i innymi znakami 0099786764553 na końcu"
>>>>>>> type(ustr)
>>>> <type 'unicode'>
>>>>>>> hashlib.md5(ustr).hexdigest()
>>>> Traceback (most recent call last):
>>>> File "<stdin>", line 1, in <module>
>>>> UnicodeEncodeError: 'ascii' codec can't encode character u'\u0142' in
>>>> position 9: ordinal not in range(128)
>>>>
>>>> Jak wybrnąć i policzyć jednak tego hasha?
>>>>
>>>> ps. python 2.7.9 na windows
>>>
>>> może np. google python unicode to ascii
>>
>> Po pierwsze nie da się konwertować unicode do ascii.
>>
>> Poza tym ja nic nie chcę konwertować, chcę by był potraktowany jako
>> unicodowy właśnie, czyli de facto dwubajtowy znak.
>
> to może google python unicode to bytes
> python bytes to string
> python md5 unicode
Jeśli chcesz mi utrzeć nosa tym googlem to ...hmmm, niepotrzebnie. Od
googla zacząłem. Ale ok, może grupa dyskusyjna służy tylko do kłótni o
pascala.
Tak czy owak problem rozwiązałem, nie konwertując do ascii czy tablicy
bajtów, ale poprawnie deklarując typ unicodowego stringa. I na taką
praktyczną radę liczyłem.
Dla potomnych:
ustr = u"Jeszcze dłuższy i bardzo długi string z ółęść oraz ;%$#@[ i innymi
znakami 0099786764553 na końcu".encode('utf-16le')
i ten mały indianin zrobił swoją robotę :-)
--
pozdrawiam
Roman Tyczka
[toc] | [prev] | [next] | [standalone]
| From | Piotr Chamera <piotr_chamera@poczta.onet.pl> |
|---|---|
| Date | 2016-10-06 12:14 +0200 |
| Message-ID | <nt584q$gi$1@dont-email.me> |
| In reply to | #29044 |
W dniu 2016-10-06 o 10:44, Roman Tyczka pisze:
> On Thu, 6 Oct 2016 01:32:07 -0700 (PDT), godek.maciek@gmail.com wrote:
>
>> W dniu czwartek, 6 października 2016 10:19:26 UTC+2 użytkownik Roman Tyczka
>>>>>>>> ustr = u"Jeszcze dłuższy i bardzo długi string z ółęść oraz ;%$#@[ i innymi znakami 0099786764553 na końcu"
>>>>>>>> type(ustr)
>>>>> <type 'unicode'>
>>>>>>>> hashlib.md5(ustr).hexdigest()
>>>>> Traceback (most recent call last):
>>>>> File "<stdin>", line 1, in <module>
>>>>> UnicodeEncodeError: 'ascii' codec can't encode character u'\u0142' in
>>>>> position 9: ordinal not in range(128)
>>>>>
>>>>> Jak wybrnąć i policzyć jednak tego hasha?
>>>>>
>>>>> ps. python 2.7.9 na windows
>>>>
>>>> może np. google python unicode to ascii
>>>
>>> Po pierwsze nie da się konwertować unicode do ascii.
>>>
>>> Poza tym ja nic nie chcę konwertować, chcę by był potraktowany jako
>>> unicodowy właśnie, czyli de facto dwubajtowy znak.
>>
>> to może google python unicode to bytes
>> python bytes to string
>> python md5 unicode
>
> Jeśli chcesz mi utrzeć nosa tym googlem to ...hmmm, niepotrzebnie. Od
> googla zacząłem. Ale ok, może grupa dyskusyjna służy tylko do kłótni o
> pascala.
> Tak czy owak problem rozwiązałem, nie konwertując do ascii czy tablicy
> bajtów, ale poprawnie deklarując typ unicodowego stringa. I na taką
> praktyczną radę liczyłem.
Dla jasności – nie zadeklarowałeś typu unicodowego stringa, ale za
pomocą metody (encode) obiektu (ustr, typu unicode) utworzyłeś nowy
ciąg bajtów reprezentujący ten ciąg znaków w kodowaniu, które podałeś
jako argument metody. Obiekt pod zmienną „ustr” pozostał niezmieniony.
> Dla potomnych:
>
> ustr = u"Jeszcze dłuższy i bardzo długi string z ółęść oraz ;%$#@[ i innymi
> znakami 0099786764553 na końcu".encode('utf-16le')
>
> i ten mały indianin zrobił swoją robotę :-)
>
[toc] | [prev] | [next] | [standalone]
| From | Roman Tyczka <noemail@because.no> |
|---|---|
| Date | 2016-10-06 12:32 +0200 |
| Message-ID | <h6zbunvyf6b0.dlg@tyczka.com> |
| In reply to | #29048 |
On Thu, 6 Oct 2016 12:14:00 +0200, Piotr Chamera wrote: >> Jeśli chcesz mi utrzeć nosa tym googlem to ...hmmm, niepotrzebnie. Od >> googla zacząłem. Ale ok, może grupa dyskusyjna służy tylko do kłótni o >> pascala. >> Tak czy owak problem rozwiązałem, nie konwertując do ascii czy tablicy >> bajtów, ale poprawnie deklarując typ unicodowego stringa. I na taką >> praktyczną radę liczyłem. > > Dla jasności – nie zadeklarowałeś typu unicodowego stringa, ale za > pomocą metody (encode) obiektu (ustr, typu unicode) utworzyłeś nowy > ciąg bajtów reprezentujący ten ciąg znaków w kodowaniu, które podałeś > jako argument metody. Obiekt pod zmienną „ustr” pozostał niezmieniony. Obiekt został zmieniony, ale nie w sensie adresu/instancji, lecz zmienił się jego stan wewnętrzny, czyli tablica bajtów zawierająca łańcuch :-) thx za pomoc -- pozdrawiam Roman Tyczka
[toc] | [prev] | [next] | [standalone]
| From | Piotr Chamera <piotr_chamera@poczta.onet.pl> |
|---|---|
| Date | 2016-10-06 13:22 +0200 |
| Message-ID | <nt5c60$co5$1@dont-email.me> |
| In reply to | #29049 |
W dniu 2016-10-06 o 12:32, Roman Tyczka pisze:
> On Thu, 6 Oct 2016 12:14:00 +0200, Piotr Chamera wrote:
>
>>> Jeśli chcesz mi utrzeć nosa tym googlem to ...hmmm, niepotrzebnie. Od
>>> googla zacząłem. Ale ok, może grupa dyskusyjna służy tylko do kłótni o
>>> pascala.
>>> Tak czy owak problem rozwiązałem, nie konwertując do ascii czy tablicy
>>> bajtów, ale poprawnie deklarując typ unicodowego stringa. I na taką
>>> praktyczną radę liczyłem.
>>
>> Dla jasności – nie zadeklarowałeś typu unicodowego stringa, ale za
>> pomocą metody (encode) obiektu (ustr, typu unicode) utworzyłeś nowy
>> ciąg bajtów reprezentujący ten ciąg znaków w kodowaniu, które podałeś
>> jako argument metody. Obiekt pod zmienną „ustr” pozostał niezmieniony.
>
> Obiekt został zmieniony, ale nie w sensie adresu/instancji, lecz zmienił
> się jego stan wewnętrzny, czyli tablica bajtów zawierająca łańcuch :-)
Może trochę namieszałem. Chodzi o to, że do zmiennej ustr, przypisałeś
zupełnie nowy obiekt, ciąg bajtów utworzony przez metodę encode,
zawierający reprezentację stringa w postaci ciągu bajtów zgodnego
z zadanym kodowaniem.
Czyli to zdanie:
>>> Tak czy owak problem rozwiązałem, nie konwertując do ascii czy
>>> tablicy bajtów, ale poprawnie deklarując typ unicodowego stringa.
jest nieprawdziwe. Oryginalny obiekt typu unicode nie został zmieniony.
Pamiętaj, że zmienne w pythonie są tylko etykietkami (wskaźnikami) do
obiektów.
Rozważ taki ciąg działań
>>> ustr = u"test ąę"
>>> type(ustr)
<type 'unicode'>
>>> id(ustr)
58766080L
>>> ustr2 = ustr
>>> id(ustr2)
58766080L
id obiektów podpiętych pod zmienne jest takie samo, obie pokazują na ten
sam obiekt
>>> ustr = ustr.encode('utf-16le')
teraz do ustr przypisaliśmy nowy obiekt o innym id (trzeba pamiętać, że
w pythonie 2.x typ 'str' i ciąg bajtów to to samo)
>>> id(ustr)
58767040L
>>> type(ustr)
<type 'str'>
ale poprzedni obiekt pozostał niezmieniony, chociaż teraz jest już
przypięty tylko do zmiennej ustr2.
>>> id(ustr2)
58766080L
>>> ustr2
u'test \u0105\u0119'
[toc] | [prev] | [next] | [standalone]
| From | Piotr Chamera <piotr_chamera@poczta.onet.pl> |
|---|---|
| Date | 2016-10-06 10:57 +0200 |
| Message-ID | <nt53kl$ia8$1@dont-email.me> |
| In reply to | #29040 |
W dniu 2016-10-06 o 09:46, Roman Tyczka pisze: > Witam, > > Używam czasami pythonowej konsoli jako kalkulatora, teraz zapragnąłem > policzyć md5 unicodowego stringa, jednak nie znam pythona jeszcze zbytnio i > się zawiesiłem: > >>>> import hashlib >>>> ustr = u"Jeszcze dłuższy i bardzo długi string z ółęść oraz ;%$#@[ i innymi znakami 0099786764553 na końcu" >>>> type(ustr) > <type 'unicode'> >>>> hashlib.md5(ustr).hexdigest() > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > UnicodeEncodeError: 'ascii' codec can't encode character u'\u0142' in > position 9: ordinal not in range(128) > > Jak wybrnąć i policzyć jednak tego hasha? > > ps. python 2.7.9 na windows > np tak: >>> hashlib.md5(ustr.encode(encoding="utf-8", errors="strict")).hexdigest() '32857a03910f204bd5adc4cb2ec2bce8' lub tak: >>> hashlib.md5(ustr.encode(encoding="utf-16", errors="strict")).hexdigest() '5da8f084e4da17f9441beccf2fa8b437' czyli trzeba jawnie skonwertować tekst unicode do takiego formatu, z jakiego chcemy liczyć md5
[toc] | [prev] | [next] | [standalone]
| From | Roman Tyczka <noemail@because.no> |
|---|---|
| Date | 2016-10-06 11:22 +0200 |
| Message-ID | <1b3k49416pl4p$.dlg@tyczka.com> |
| In reply to | #29045 |
On Thu, 6 Oct 2016 10:57:07 +0200, Piotr Chamera wrote: >> Jak wybrnąć i policzyć jednak tego hasha? >> >> ps. python 2.7.9 na windows >> > > np tak: > >>> hashlib.md5(ustr.encode(encoding="utf-8", errors="strict")).hexdigest() > > '32857a03910f204bd5adc4cb2ec2bce8' > > lub tak: > >>> hashlib.md5(ustr.encode(encoding="utf-16", > errors="strict")).hexdigest() > > '5da8f084e4da17f9441beccf2fa8b437' > > czyli trzeba jawnie skonwertować tekst unicode do takiego formatu, z > jakiego chcemy liczyć md5 A jaki jest domyślny format, gdy zmienną utworzyłem tak: >>> ustr = u"Jeszcze dłuższy i bardzo długi string z ółęść oraz ;%$#@[ i innymi znakami 0099786764553 na końcu" >>> type(ustr) <type 'unicode'> To jest utf-8? 16? 32? -- pozdrawiam Roman Tyczka
[toc] | [prev] | [next] | [standalone]
| From | Piotr Chamera <piotr_chamera@poczta.onet.pl> |
|---|---|
| Date | 2016-10-06 11:50 +0200 |
| Message-ID | <nt56ph$s0u$1@dont-email.me> |
| In reply to | #29046 |
W dniu 2016-10-06 o 11:22, Roman Tyczka pisze: > On Thu, 6 Oct 2016 10:57:07 +0200, Piotr Chamera wrote: > >>> Jak wybrnąć i policzyć jednak tego hasha? >>> >>> ps. python 2.7.9 na windows >>> >> >> np tak: >> >>> hashlib.md5(ustr.encode(encoding="utf-8", errors="strict")).hexdigest() >> >> '32857a03910f204bd5adc4cb2ec2bce8' >> >> lub tak: >> >>> hashlib.md5(ustr.encode(encoding="utf-16", >> errors="strict")).hexdigest() >> >> '5da8f084e4da17f9441beccf2fa8b437' >> >> czyli trzeba jawnie skonwertować tekst unicode do takiego formatu, z >> jakiego chcemy liczyć md5 > > A jaki jest domyślny format, gdy zmienną utworzyłem tak: > >>>> ustr = u"Jeszcze dłuższy i bardzo długi string z ółęść oraz ;%$#@[ i innymi znakami 0099786764553 na końcu" >>>> type(ustr) > <type 'unicode'> > > To jest utf-8? 16? 32? > String na wejściu jest wg kodowania ustawionego na konsoli lub w pliku (często jest to utf-8, w pythonie 3 pliki źródłowe domyślnie są czytane jako utf-8, w 2.x trzeba to było zadeklarować na początku pliku) konwertowany do wewnętrznej reprezentacji. String unicode w pythonie potrafi reprezentować wszystkie znaki standardu unicode (chyba), ale nie wiemy (nie potrzebujemy wiedzieć) w jakim formacie jest trzymany w pamięci (czy jako liczba 32 bitowa w wersji 32bit, a 64 bitowa na procesorach 64 bit, czy jakiś inny obiekt). Jeśli potrzebujemy konwersji na ciąg w określonym formacie, musimy to jawnie przekodować na ciąg bajtów, np.: >>> ustr.encode(encoding="utf-32", errors="strict") '\xff\xfe\x00\x00J\x00\x00\x00e\x00\x00\x00s\x00\x00\x00z\x00\x00\x00c\x00\x00\x00z\x00\x00\x00e\x00\x00\x00 \x00\x00\x00d\x00\x00\x00B\x01\x00\x00u\x00\x00\x00|\x01\x00\x00s\x00\x00\x00z\x00\x00\x00y\x00\x00\x00 \x00\x00\x00i\x00\x00\x00 \x00\x00\x00b\x00\x00\x00a\x00\x00\x00r\x00\x00\x00d\x00\x00\x00z\x00\x00\x00o\x00\x00\x00 \x00\x00\x00d\x00\x00\x00B\x01\x00\x00u\x00\x00\x00g\x00\x00\x00i\x00\x00\x00 \x00\x00\x00s\x00\x00\x00t\x00\x00\x00r\x00\x00\x00i\x00\x00\x00n\x00\x00\x00g\x00\x00\x00 \x00\x00\x00z\x00\x00\x00 \x00\x00\x00\xf3\x00\x00\x00B\x01\x00\x00\x19\x01\x00\x00[\x01\x00\x00\x07\x01\x00\x00 \x00\x00\x00o\x00\x00\x00r\x00\x00\x00a\x00\x00\x00z\x00\x00\x00 \x00\x00\x00;\x00\x00\x00%\x00\x00\x00$\x00\x00\x00#\x00\x00\x00@\x00\x00\x00[\x00\x00\x00 \x00\x00\x00i\x00\x00\x00 \x00\x00\x00i\x00\x00\x00n\x00\x00\x00n\x00\x00\x00y\x00\x00\x00m\x00\x00\x00i\x00\x00\x00 \x00\x00\x00z\x00\x00\x00n\x00\x00\x00a\x00\x00\x00k\x00\x00\x00a\x00\x00\x00m\x00\x00\x00i\x00\x00\x00 \x00\x00\x000\x00\x00\x000\x00\x00\x009\x00\x00\x009\x00\x00\x007\x00\x00\x008\x00\x00\x006\x00\x00\x007\x00\x00\x006\x00\x00\x004\x00\x00\x005\x00\x00\x005\x00\x00\x003\x00\x00\x00 \x00\x00\x00n\x00\x00\x00a\x00\x00\x00 \x00\x00\x00k\x00\x00\x00o\x00\x00\x00D\x01\x00\x00c\x00\x00\x00u\x00\x00\x00'
[toc] | [prev] | [standalone]
Back to top | Article view | pl.comp.programming
csiph-web