-
1. Data: 2016-10-06 09:46:24
Temat: python i stringi
Od: Roman Tyczka <n...@b...no>
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
-
2. Data: 2016-10-06 10:10:29
Temat: Re: python i stringi
Od: g...@g...com
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
-
3. Data: 2016-10-06 10:19:25
Temat: Re: python i stringi
Od: Roman Tyczka <n...@b...no>
On Thu, 6 Oct 2016 01:10:29 -0700 (PDT), g...@g...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
-
4. Data: 2016-10-06 10:32:07
Temat: Re: python i stringi
Od: g...@g...com
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
-
5. Data: 2016-10-06 10:44:12
Temat: Re: python i stringi
Od: Roman Tyczka <n...@b...no>
On Thu, 6 Oct 2016 01:32:07 -0700 (PDT), g...@g...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
-
6. Data: 2016-10-06 10:57:07
Temat: Re: python i stringi
Od: Piotr Chamera <p...@p...onet.pl>
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
-
7. Data: 2016-10-06 11:22:07
Temat: Re: python i stringi
Od: Roman Tyczka <n...@b...no>
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
-
8. Data: 2016-10-06 11:50:55
Temat: Re: python i stringi
Od: Piotr Chamera <p...@p...onet.pl>
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\x0
0\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'
-
9. Data: 2016-10-06 12:14:00
Temat: Re: python i stringi
Od: Piotr Chamera <p...@p...onet.pl>
W dniu 2016-10-06 o 10:44, Roman Tyczka pisze:
> On Thu, 6 Oct 2016 01:32:07 -0700 (PDT), g...@g...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ę :-)
>
-
10. Data: 2016-10-06 12:32:03
Temat: Re: python i stringi
Od: Roman Tyczka <n...@b...no>
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