Discussion:
Polskie znaki w Pythonie
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
Mateusz Pilszek
2005-12-02 12:11:19 UTC
Permalink
Czy nie da się tworzyć skryptów Pythona, aby pisać polskie znaki w jakimś
edytorze i znaki te były widoczne w konsoli. Jak zapiszę plik w UTF-8 czy
US-ASCII to i tak ich na konsoli nie widać. Python wypisuje komunikat, że jest
to nieznany znak ASCII. Pisanie literałów \uxxxx jest trochę irytujące. Jak
zrobić, żeby wszystko było OK. Dziękuję za odpowiedź.
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Grzegorz Szyszlo
2005-12-02 12:53:42 UTC
Permalink
Post by Mateusz Pilszek
Czy nie da się tworzyć skryptów Pythona, aby pisać polskie znaki w jakimś
edytorze i znaki te były widoczne w konsoli. Jak zapiszę plik w UTF-8 czy
US-ASCII to i tak ich na konsoli nie widać. Python wypisuje komunikat, że jest
to nieznany znak ASCII. Pisanie literałów \uxxxx jest trochę irytujące. Jak
zrobić, żeby wszystko było OK. Dziękuję za odpowiedź.
hmmmm. zadeklarowac charset na samym poczatku skryptu?

znik.
Jarek Zgoda
2005-12-02 19:39:39 UTC
Permalink
Post by Mateusz Pilszek
Czy nie da się tworzyć skryptów Pythona, aby pisać polskie znaki w jakimś
edytorze i znaki te były widoczne w konsoli. Jak zapiszę plik w UTF-8 czy
US-ASCII to i tak ich na konsoli nie widać. Python wypisuje komunikat, że jest
to nieznany znak ASCII. Pisanie literałów \uxxxx jest trochę irytujące. Jak
zrobić, żeby wszystko było OK. Dziękuję za odpowiedź.
Zadeklarować kodowanie w nagłówku i używać kodowania zgodnego z
kodowaniem terminala. W skrócie: na Windows to teoretycznie niemożliwe,
ponieważ kodowanie "terminala" to cp437, w którym polskie znaki... nie
występują.
--
Jarek Zgoda
http://jpa.berlios.de/
Wiktor Grębla
2005-12-03 13:16:30 UTC
Permalink
Post by Jarek Zgoda
Zadeklarować kodowanie w nagłówku i używać kodowania zgodnego z
kodowaniem terminala. W skrócie: na Windows to teoretycznie niemożliwe,
ponieważ kodowanie "terminala" to cp437, w którym polskie znaki... nie
występują.
Zależy o jakim terminalu mówimy :), no bo chyba nie takim, w którym
ustawiona jest strona kodowa 852:

Loading Image...

Uprzedzając ewentualne pytanie przedpiscy (dlaczego u'' skoro w nagłówku
podajemy kodowanie), python - co sam mi kiedyś uświadomiłeś przy okazji
rantu na pygtk :) - operuje na obiektach unikodowych, więc (przynajmniej
ja tak to rozumiem) najpierw przekodowuje sobie napis z cp852 do unicode,
potem sztuczka z sys.stdout odpowiada za przekodowanie z unicode do cp852.

Pozdrawiam
W.
--
This land is full of trousers!
this land is full of mausers!
And pussycats to eat them when the sun goes down!
-- Firesign Theater
Jarek Zgoda
2005-12-03 19:53:23 UTC
Permalink
Post by Wiktor Grębla
Post by Jarek Zgoda
Zadeklarować kodowanie w nagłówku i używać kodowania zgodnego z
kodowaniem terminala. W skrócie: na Windows to teoretycznie niemożliwe,
ponieważ kodowanie "terminala" to cp437, w którym polskie znaki... nie
występują.
Zależy o jakim terminalu mówimy :), no bo chyba nie takim, w którym
http://republika.pl/greblus/shot/bla.png
Chciałbyś... ;)

Na NT4 to jest 437, nawet pomimo tego, że można wpisać polskie znaki.
Ale powinienem był napisać "...to czasami cp437...".
--
Jarek Zgoda
http://jpa.berlios.de/
emski
2005-12-03 14:15:15 UTC
Permalink
Post by Mateusz Pilszek
Czy nie da się tworzyć skryptów Pythona, aby pisać polskie znaki w jakimś
edytorze i znaki te były widoczne w konsoli. Jak zapiszę plik w UTF-8 czy
US-ASCII to i tak ich na konsoli nie widać. Python wypisuje komunikat, że jest
to nieznany znak ASCII. Pisanie literałów \uxxxx jest trochę irytujące. Jak
zrobić, żeby wszystko było OK. Dziękuję za odpowiedź.
Witam!

Zrobiłem kilka testów na konsoli WinXP (nie napisałeś jaki system!).
Do testów wykorzystałem edytor Notepad2.

Jeżeli zadeklarujemy kodowanie jako UTF-8 i zapiszemy plik w UTF-8,
ewentualnie zadeklarujemy cp1250 i zapiszemy jako ascii to polskie znaki
na konsoli uzyskamy po prostu poprzez < print u'ąśżźććłóń' >

Sytuacja komplikuje się gdy chcemy przekazać do programu tekst z
polskimi znakami. Jeżeli skrypt ma wypisać tekst podany jako parametr to
pomaga decode() np. < print sys.argv[1].decode('cp1250') >

W przypadku raw_input() jest jeszcze inaczej. Obiekt zwrócony przez
raw_input() jest poprawnie wyświetlany z polskimi znakami. Problemem
może być 'prompt' zawierający polskie znaki. Problem ten rozwiązuje
encode() np. < name = raw_input(u'wprowadź imię: '.encode('cp852')) >

Dziwne...
--
pozdrawiam
mariusz
Mateusz Pilszek
2005-12-05 08:09:46 UTC
Permalink
Post by Mateusz Pilszek
Czy nie da się tworzyć skryptów Pythona, aby pisać polskie znaki w jakimś
edytorze i znaki te były widoczne w konsoli. Jak zapiszę plik w UTF-8 czy
US-ASCII to i tak ich na konsoli nie widać. Python wypisuje komunikat, że jest
to nieznany znak ASCII. Pisanie literałów \uxxxx jest trochę irytujące. Jak
zrobić, żeby wszystko było OK. Dziękuję za odpowiedź.
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
A jaką postać ma ta deklaracja kodowania na początku skryptu?
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
RobertSzefler
2005-12-05 08:47:41 UTC
Permalink
Post by Mateusz Pilszek
Post by Mateusz Pilszek
Czy nie da się tworzyć skryptów Pythona, aby pisać polskie znaki w jakimś
edytorze i znaki te były widoczne w konsoli. Jak zapiszę plik w UTF-8 czy
US-ASCII to i tak ich na konsoli nie widać. Python wypisuje komunikat, że jest
to nieznany znak ASCII. Pisanie literałów \uxxxx jest trochę irytujące. Jak
zrobić, żeby wszystko było OK. Dziękuję za odpowiedź.
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
A jaką postać ma ta deklaracja kodowania na początku skryptu?
Na przykład:

# -*- coding: latin2 -*-

Musi być w 1szej lub 2giej linii skryptu.

http://www.python.org/doc/2.4.2/ref/encodings.html

Loading...