Thread View: pl.comp.lang.python
12 messages
12 total messages
Started by Michal M
Tue, 22 Dec 2009 21:52
Kodowanie stringu pod windows i linux
Author: Michal M
Date: Tue, 22 Dec 2009 21:52
Date: Tue, 22 Dec 2009 21:52
18 lines
1819 bytes
1819 bytes
Witam,
Mam program który string unicode koduje do innych formatów (nie
wypisuje tego) (windows-1250 i iso-5589-2). Pod Windows wszystko
działa, pod Linux wywala błąd na txt.encode("windows-1250","replace")
(i iso pewnie też):
File "/usr/local/lib/python2.6/encodings/cp1250.py", line 12, in
encode
return codecs.charmap_encode(input,errors,encoding_table)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position
3: ordinal not in range(128)
To samo ze shella pythona (puszczony w utf-8)
"ĄĆ".encode("windows-1250")
Pomocy!
Re: Kodowanie stringu pod windows i linux
Author: Rob Wolfe
Date: Tue, 22 Dec 2009 22:04
Date: Tue, 22 Dec 2009 22:04
43 lines
2306 bytes
2306 bytes
Michal M <mierzwm@swietochlowice.org> writes:
> Witam,
>
> Mam program który string unicode koduje do innych formatów (nie
> wypisuje tego) (windows-1250 i iso-5589-2). Pod Windows wszystko
> działa, pod Linux wywala błąd na txt.encode("windows-1250","replace")
> (i iso pewnie też):
>
> File "/usr/local/lib/python2.6/encodings/cp1250.py", line 12, in
> encode
> return codecs.charmap_encode(input,errors,encoding_table)
> UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position
> 3: ordinal not in range(128)
>
> To samo ze shella pythona (puszczony w utf-8)
> "ĄĆ".encode("windows-1250")
>
>
> Pomocy!
Kodowanie zależy od ustawień lokalizacji w systemie.
Na Windzie pewnie miałeś ustawione 'cp1250' albo 'iso-8859-2',
a pod Linuksem zapewne masz 'UTF-8'.
>>> import sys
>>> sys.stdin.encoding
'UTF-8'
>>> 'ĄĆ'.encode('cp1250')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.5/encodings/cp1250.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_table)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 0: ordinal not in range(128)
>>> 'ĄĆ'.decode('utf-8').encode('cp1250')
'\xa5\xc6'
Prawidłowo zawsze przed zakodowaniem jakiegoś tekstu musisz
go odkodować (a najlepiej mieć wszystko w unikodzie)
i *TY* programista musisz wiedzieć w jakim ten tekst jest kodowaniu,
a nie Python.
RW
Re: Kodowanie stringu pod windows i linux
Author: Łukasz Rekucki
Date: Tue, 22 Dec 2009 22:29
Date: Tue, 22 Dec 2009 22:29
20 lines
2129 bytes
2129 bytes
On Dec 22, 10:52 pm, Michal M <mier...@swietochlowice.org> wrote:
> Witam,
>
> Mam program który string unicode koduje do innych formatów (nie
> wypisuje tego) (windows-1250 i iso-5589-2). Pod Windows wszystko
> działa, pod Linux wywala błąd na txt.encode("windows-1250","replace")
> (i iso pewnie też):
>
> File "/usr/local/lib/python2.6/encodings/cp1250.py", line 12, in
> encode
> return codecs.charmap_encode(input,errors,encoding_table)
> UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position
> 3: ordinal not in range(128)
>
> To samo ze shella pythona (puszczony w utf-8)
> "ĄĆ".encode("windows-1250")
>
> Pomocy!
W serii 2.x "ąć" to nie napis unicode, więc encode (poza np. base64)
nie ma sensu dla ciągu bajtów. u"ąć" to jest napis unicode.
Re: Kodowanie stringu pod windows i linux
Author: Michal M
Date: Wed, 23 Dec 2009 06:57
Date: Wed, 23 Dec 2009 06:57
49 lines
3266 bytes
3266 bytes
On 22 Gru, 23:04, Rob Wolfe <r...@smsnet.pl> wrote:
> Michal M <mier...@swietochlowice.org> writes:
> > Witam,
>
> > Mam program który string unicode koduje do innych formatów (nie
> > wypisuje tego) (windows-1250 i iso-5589-2). Pod Windows wszystko
> > działa, pod Linux wywala błąd na txt.encode("windows-1250","replace")
> > (i iso pewnie też):
>
> > File "/usr/local/lib/python2.6/encodings/cp1250.py", line 12, in
> > encode
> > return codecs.charmap_encode(input,errors,encoding_table)
> > UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position
> > 3: ordinal not in range(128)
>
> > To samo ze shella pythona (puszczony w utf-8)
> > "ĄĆ".encode("windows-1250")
>
> > Pomocy!
>
> Kodowanie zależy od ustawień lokalizacji w systemie.
> Na Windzie pewnie miałeś ustawione 'cp1250' albo 'iso-8859-2',
> a pod Linuksem zapewne masz 'UTF-8'.
Nie. Na Windzie też leciało spod UTF-8 bo odpalane z Eclipse.
>
> >>> import sys
> >>> sys.stdin.encoding
> 'UTF-8'
> >>> 'ĄĆ'.encode('cp1250')
>
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> File "/usr/lib/python2.5/encodings/cp1250.py", line 12, in encode
> return codecs.charmap_encode(input,errors,encoding_table)
> UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 0: ordinal not in range(128)>>> 'ĄĆ'.decode('utf-8').encode('cp1250')
>
> '\xa5\xc6'
>
> Prawidłowo zawsze przed zakodowaniem jakiegoś tekstu musisz
> go odkodować (a najlepiej mieć wszystko w unikodzie)
> i *TY* programista musisz wiedzieć w jakim ten tekst jest kodowaniu,
> a nie Python.
Ależ ja doskonale wiem co w czym mam i tylko próbuję przekonać Pythona
aby to przekonwertował na to co chcę mieć.
Wszystkie stringi mam w unicode i konwertuje przed wysłaniem na inne
formaty (albo zostawiam w unicode).
Re: Kodowanie stringu pod windows i linux
Author: Michal M
Date: Wed, 23 Dec 2009 06:58
Date: Wed, 23 Dec 2009 06:58
31 lines
2559 bytes
2559 bytes
On 22 Gru, 23:29, Łukasz Rekucki <lreku...@gmail.com> wrote:
> On Dec 22, 10:52 pm, Michal M <mier...@swietochlowice.org> wrote:
>
>
>
> > Witam,
>
> > Mam program który string unicode koduje do innych formatów (nie
> > wypisuje tego) (windows-1250 i iso-5589-2). Pod Windows wszystko
> > działa, pod Linux wywala błąd na txt.encode("windows-1250","replace")
> > (i iso pewnie też):
>
> > File "/usr/local/lib/python2.6/encodings/cp1250.py", line 12, in
> > encode
> > return codecs.charmap_encode(input,errors,encoding_table)
> > UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position
> > 3: ordinal not in range(128)
>
> > To samo ze shella pythona (puszczony w utf-8)
> > "ĄĆ".encode("windows-1250")
>
> > Pomocy!
>
> W serii 2.x "ąć" to nie napis unicode, więc encode (poza np. base64)
> nie ma sensu dla ciągu bajtów. u"ąć" to jest napis unicode.- Ukryj cytowany tekst -
>
> - Pokaż cytowany tekst -
Czyli muszę dodać u" mimo, iż napis jest w unicode. Ok, a jak to
zrobić ze stringami wczytywanymi z pliku?
Nie mogę dodać 'u' przed nazwą zmiennej raczej.
Re: Kodowanie stringu pod windows i linux
Author: Michal M
Date: Wed, 23 Dec 2009 07:07
Date: Wed, 23 Dec 2009 07:07
48 lines
3193 bytes
3193 bytes
On 23 Gru, 07:58, Michal M <mmier...@tycowaterworks.pl> wrote:
> On 22 Gru, 23:29, Łukasz Rekucki <lreku...@gmail.com> wrote:
>
>
>
>
>
> > On Dec 22, 10:52 pm, Michal M <mier...@swietochlowice.org> wrote:
>
> > > Witam,
>
> > > Mam program który string unicode koduje do innych formatów (nie
> > > wypisuje tego) (windows-1250 i iso-5589-2). Pod Windows wszystko
> > > działa, pod Linux wywala błąd na txt.encode("windows-1250","replace")
> > > (i iso pewnie też):
>
> > > File "/usr/local/lib/python2.6/encodings/cp1250.py", line 12, in
> > > encode
> > > return codecs.charmap_encode(input,errors,encoding_table)
> > > UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position
> > > 3: ordinal not in range(128)
>
> > > To samo ze shella pythona (puszczony w utf-8)
> > > "ĄĆ".encode("windows-1250")
>
> > > Pomocy!
>
> > W serii 2.x "ąć" to nie napis unicode, więc encode (poza np. base64)
> > nie ma sensu dla ciągu bajtów. u"ąć" to jest napis unicode.- Ukryj cytowany tekst -
>
> > - Pokaż cytowany tekst -
>
> Czyli muszę dodać u" mimo, iż napis jest w unicode. Ok, a jak to
> zrobić ze stringami wczytywanymi z pliku?
> Nie mogę dodać 'u' przed nazwą zmiennej raczej.- Ukryj cytowany tekst -
>
> - Pokaż cytowany tekst -
Hmm z pierwszych prób, zgaduję, (mając na uwadze obie Wasze
odpowiedzi), że jeśli mam tekst w zmiennej i jest on w unicode to
muszę najpierw powiedzieć pythonowi, że jest w unicode a później
dopiero zakodować? To by wyglądało tak
a = "ĄĆ"
print a.decode("utf-8").encode("windows-1250")
Powalczę z tym. Wszelkie uwagi mile widziane i dziąkuję Wam za
odpowiedzi.
Re: Kodowanie stringu pod windows i linux
Author: Artur M. Piwko
Date: Wed, 23 Dec 2009 08:18
Date: Wed, 23 Dec 2009 08:18
23 lines
1849 bytes
1849 bytes
In the darkest hour on Tue, 22 Dec 2009 22:58:48 -0800 (PST),
Michal M <mmierzwa@tycowaterworks.pl> screamed:
>> > To samo ze shella pythona (puszczony w utf-8)
>> > "ĄĆ".encode("windows-1250")
>>
>> W serii 2.x "ąć" to nie napis unicode, więc encode (poza np. base64)
>> nie ma sensu dla ciągu bajtów. u"ąć" to jest napis unicode.- Ukryj cytowany tekst -
>
> Czyli muszę dodać u" mimo, iż napis jest w unicode.
Tekst nie jest w unicode, a w UTF-8.
> Ok, a jak to
> zrobić ze stringami wczytywanymi z pliku?
> Nie mogę dodać 'u' przed nazwą zmiennej raczej.
text = unicode(spam, 'utf-8').decode('windows-1250')
--
[ Artur M. Piwko : Pipen : AMP29-RIPE : RLU:100918 : From == Trap! : SIG:232B ]
[ 09:17:15 user up 12295 days, 21:12, 1 user, load average: 0.30, 0.81, 0.27 ]
Every dog has its day, but the nights belong to the pussycats.
Re: Kodowanie stringu pod windows i linux
Author: Gallus Anonimus
Date: Wed, 23 Dec 2009 08:36
Date: Wed, 23 Dec 2009 08:36
16 lines
1411 bytes
1411 bytes
On Tue, 22 Dec 2009 22:58:48 -0800 (PST), Michal M
<mmierzwa@tycowaterworks.pl> wrote:
>Czyli muszę dodać u" mimo, iż napis jest w unicode. Ok, a jak to
>zrobić ze stringami wczytywanymi z pliku?
>Nie mogę dodać 'u' przed nazwą zmiennej raczej.
tak?
import codecs
f = codecs.open("plik.txt","r","utf-8")
txt = f.read()
f.close()
print type(txt)
print txt.encode('windows-1250')
Re: Kodowanie stringu pod windows i linux
Author: Filip Wasilewski
Date: Wed, 23 Dec 2009 08:49
Date: Wed, 23 Dec 2009 08:49
16 lines
2094 bytes
2094 bytes
On Dec 23, 8:07 am, Michal M <mmier...@tycowaterworks.pl> wrote:
> Hmm z pierwszych prób, zgaduję, (mając na uwadze obie Wasze
> odpowiedzi), że jeśli mam tekst w zmiennej i jest on w unicode to
> muszę najpierw powiedzieć pythonowi, że jest w unicode a później
> dopiero zakodować? To by wyglądało tak
>
> a = "ĄĆ"
> print a.decode("utf-8").encode("windows-1250")
Małe uściślenie - UTF8 to nie jest Unicode, tylko sposób reprezentacji
Unicode/UCS jako ciągu bajtów [1].
[1] http://unicode.org/faq/utf_bom.html#gen2 - What is a UTF?
Filip Wasilewski
http://filipwasilewski.pl/
Re: Kodowanie stringu pod windows i linux
Author: Michal M
Date: Wed, 23 Dec 2009 10:04
Date: Wed, 23 Dec 2009 10:04
38 lines
2752 bytes
2752 bytes
On 23 Gru, 09:18, "Artur M. Piwko" <milusi.pysiac...@buziaczek.pl>
wrote:
> In the darkest hour on Tue, 22 Dec 2009 22:58:48 -0800 (PST),
> Michal M <mmier...@tycowaterworks.pl> screamed:
>
> >> > To samo ze shella pythona (puszczony w utf-8)
> >> > "ĄĆ".encode("windows-1250")
>
> >> W serii 2.x "ąć" to nie napis unicode, więc encode (poza np. base64)
> >> nie ma sensu dla ciągu bajtów. u"ąć" to jest napis unicode.- Ukryj cytowany tekst -
>
> > Czyli muszę dodać u" mimo, iż napis jest w unicode.
>
> Tekst nie jest w unicode, a w UTF-8.
>
> > Ok, a jak to
> > zrobić ze stringami wczytywanymi z pliku?
> > Nie mogę dodać 'u' przed nazwą zmiennej raczej.
>
> text = unicode(spam, 'utf-8').decode('windows-1250')
>
> --
> [ Artur M. Piwko : Pipen : AMP29-RIPE : RLU:100918 : From == Trap! : SIG:232B ]
> [ 09:17:15 user up 12295 days, 21:12, 1 user, load average: 0.30, 0.81, 0.27 ]
>
> Every dog has its day, but the nights belong to the pussycats.
Dziękuję za odpowiedzi.
a = "Łóżko"
print a.decode("utf-8").encode("windows-1250")
i
b = u"Łóżko"
print b.encode("windows-1250")
Działają tak samo i to chyba wystarczy.
Re: Kodowanie stringu pod windows i linux
Author: ethanak
Date: Wed, 23 Dec 2009 16:20
Date: Wed, 23 Dec 2009 16:20
22 lines
1429 bytes
1429 bytes
Dnia Wed, 23 Dec 2009 02:04:17 -0800, Michal M napisał(a):
[...]
>
> Dziękuję za odpowiedzi.
>
> a = "Łóżko"
> print a.decode("utf-8").encode("windows-1250")
>
> i
>
> b = u"Łóżko"
> print b.encode("windows-1250")
>
> Działają tak samo i to chyba wystarczy.
A co masz w #coding?
ethanak
--
mailto=window.atob('ZXRoYW5ha0Bwb2xpcC5jb20=');
http://milena.polip.com/ - nie czekam na Ivo!
Re: Kodowanie stringu pod windows i linux
Author: William Bonawentura
Date: Wed, 30 Dec 2009 07:03
Date: Wed, 30 Dec 2009 07:03
13 lines
1470 bytes
1470 bytes
Użytkownik "Gallus Anonimus" <gallusnnms@na_gmailu.com> napisał w wiadomości
news:sdl3j59muoire1dn8qhohhld9e8u98pfid@4ax.com...
>
> import codecs
> f = codecs.open("plik.txt","r","utf-8")
> txt = f.read()
> f.close()
>
import codecs
with codecs.open("plik.txt","r","utf-8") as f:
txt = f.read()
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads