🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#27095
Author: Michal M
Date: Tue, 22 Dec 2009 21:52
18 lines
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
#27106
Author: Rob Wolfe
Date: Tue, 22 Dec 2009 22:04
43 lines
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
#27096
Author: Łukasz Rekucki
Date: Tue, 22 Dec 2009 22:29
20 lines
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
#27107
Author: Michal M
Date: Wed, 23 Dec 2009 06:57
49 lines
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
#27097
Author: Michal M
Date: Wed, 23 Dec 2009 06:58
31 lines
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
#27098
Author: Michal M
Date: Wed, 23 Dec 2009 07:07
48 lines
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
#27101
Author: Artur M. Piwko
Date: Wed, 23 Dec 2009 08:18
23 lines
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
#27104
Author: Gallus Anonimus
Date: Wed, 23 Dec 2009 08:36
16 lines
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
#27099
Author: Filip Wasilewski
Date: Wed, 23 Dec 2009 08:49
16 lines
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
#27102
Author: Michal M
Date: Wed, 23 Dec 2009 10:04
38 lines
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
#27103
Author: ethanak
Date: Wed, 23 Dec 2009 16:20
22 lines
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
#27105
Author: William Bonawentura
Date: Wed, 30 Dec 2009 07:03
13 lines
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