RE: [Python-de] lokalisierte String-Methoden?
Python 2.3.2 (#49, Oct 2 2003, 20:02:00) [MSC v.1200 32 bit (Intel)] on win32 .>>> print 'ölwännchen'.upper() öLWäNNCHEN Das gleiche mit Python 2.4.1 auf Win32.
Warum benutzt du keine Unicode-Strings?
Weil es auch nicht hilft:
s = u'ölwännchen' print s, s.upper() ölwännchen öLWäNNCHEN
Grüße vom Südsee! Henning Hraban Ramm Südkurier Medienhaus / MediaPro Systembetreuung / Systementwicklung _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Henning.Ramm@mediapro-gmbh.de schrieb:
Python 2.3.2 (#49, Oct 2 2003, 20:02:00) [MSC v.1200 32 bit (Intel)] on win32 .>>> print 'ölwännchen'.upper() öLWäNNCHEN Das gleiche mit Python 2.4.1 auf Win32. Warum benutzt du keine Unicode-Strings?
Weil es auch nicht hilft:
s = u'ölwännchen' print s, s.upper() ölwännchen öLWäNNCHEN
Ah, das ist also dein Problem. Deine Konsole ist falsch eingestellt. Das hat nichts mit Python zu tun. Was du da angezeigt bekommst, ist die UTF-8 Ausgabe deines Strings (also auch eine Unicode-Darstellung). Das ist wunderbar in Ordnung, wenn deine Konsole (oder Eingabeaufforderung, oder wie auch immer) das auch ausgeben kann. Kann sie aber anscheinend nicht, sie scheint ISO-8859-1 zu erwarten. Ist also ein Windows-Problem, davon habe ich leider nur wenig Ahnung. Aber das sollte dich nicht davon abhalten, das einfach zu benutzen. Nur, weil deine Konsole das nicht anzeigen kann, heißt das nicht, dass Python da irgendwas dran falsch macht. Stefan _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
On Tuesday 22 November 2005 11:09, Stefan Behnel wrote:
ölwännchen öLWäNNCHEN
Ah, das ist also dein Problem. Deine Konsole ist falsch eingestellt. Das hat nichts mit Python zu tun. Was du da angezeigt bekommst, ist die UTF-8 Ausgabe deines Strings (also auch eine Unicode-Darstellung). Das ist wunderbar in Ordnung, wenn deine Konsole (oder Eingabeaufforderung, oder wie auch immer) das auch ausgeben kann. Kann sie aber anscheinend nicht, sie scheint ISO-8859-1 zu erwarten.
Nee, das Problem ist das in beiden Faellen Oe (keine deutsche Tastatur, btw...) als ö dargestellt wird. Das muesste aber unterschiedlich sein - auch in Unicode, und auch mit nem falschen output-encoding bzw falscher Darstellung des encodings. Bytewerte sind Bytewerte. Diez _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Diez B. Roggisch schrieb:
On Tuesday 22 November 2005 11:09, Stefan Behnel wrote:
ölwännchen öLWäNNCHEN Ah, das ist also dein Problem. Deine Konsole ist falsch eingestellt. Das hat nichts mit Python zu tun. Was du da angezeigt bekommst, ist die UTF-8 Ausgabe deines Strings (also auch eine Unicode-Darstellung). Das ist wunderbar in Ordnung, wenn deine Konsole (oder Eingabeaufforderung, oder wie auch immer) das auch ausgeben kann. Kann sie aber anscheinend nicht, sie scheint ISO-8859-1 zu erwarten.
Nee, das Problem ist dass in beiden Fällen Ö als ö dargestellt wird.
Hmm, richtig, war ich mal wider etwas vorschnell (sprich: blind auf zwei von drei Hüneraugen). Henning, schau doch mal in deine pyconfig.h hinein, wie deine Python-Installation konfiguriert ist (keine Ahnung, wo die unter Windows liegt, vielleicht irgendwo im Python Installationsverzeichnis). Bei mir steht da das hier bezüglich Unicode drin: /* Define if you have a useable wchar_t type defined in wchar.h; useable means wchar_t must be an unsigned type with at least 16 bits. (see Include/unicodeobject.h). */ #define HAVE_USABLE_WCHAR_T 1 /* Define as the integral type used for Unicode representation. */ #define PY_UNICODE_TYPE wchar_t /* Define as the size of the unicode type. */ #define Py_UNICODE_SIZE 4 /* Define if you want to have a Unicode type. */ #define Py_USING_UNICODE 1 /* Define if you want wctype.h functions to be used instead of the one supplied by Python itself. (see Include/unicodectype.h). */ /* #undef WANT_WCTYPE_FUNCTIONS */ Deutet alles auf eine UCS-4 Installation hin, also 32-bit Unicode laut http://en.wikipedia.org/wiki/UTF-32 Wenn das bei dir genauso ist, dann wäre ich zumindest mit meinem Latein (bzw. Latin-1 :) erstmal am Ende... Stefan _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Henning.Ramm@mediapro-gmbh.de schrieb:
Python 2.3.2 (#49, Oct 2 2003, 20:02:00) [MSC v.1200 32 bit (Intel)] on win32 .>>> print 'ölwännchen'.upper() öLWäNNCHEN Das gleiche mit Python 2.4.1 auf Win32. Warum benutzt du keine Unicode-Strings?
Weil es auch nicht hilft:
s = u'ölwännchen' print s, s.upper() ölwännchen öLWäNNCHEN
Doch noch was: http://starship.python.net/pipermail/python-de/2005q2/006695.html Scheinst nicht der einzige mit diesem Problem zu sein. PEP 261 (von 2001) schreibt: Windows builds will be narrow for a while based on the fact that there have been few requests for wide characters, those requests are mostly from hard-core programmers with the ability to buy their own Python and Windows itself is strongly biased towards 16-bit characters. http://www.python.org/peps/pep-0261.html Ist also vielleicht wirklich ein Nur-Windows-Problem. Stefan _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
print s führt in WinXP habe bei mir zu folgendem Error: .. File "C:\Python23\lib\encodings\cp850.py", line 18, in encode return codecs.charmap_encode(input,errors,encoding_map) UnicodeEncodeError: 'charmap' codec cant encode character u'\x94' in
Hallo Allerseits, ich bekomme bei dem Beispiel überhaupt nur Nonsens und glaube doch, dass es mit den locals und dem "consolefont" im engeren Sinne zu tun haben muss. position 0: character maps to <undefined> In Linux 2.6.13-gentoo-r5 fällt das Ganze ein wenig schweigsamer aus und lautet bloß: UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128) das ist aber zugegeeben sei ich vor kurzen neu aufgesetzt habe ein xorg.conf Problem, das mir keine de Lokalen in den diversen Konsole-Shells anzeigen will, wohingegen bei anderen XApps hier kein Problem besteht: siehe äÖö߀ Herzlich, Franz On Tue, 2005-11-22 at 11:09 +0100, Stefan Behnel wrote:
Henning.Ramm@mediapro-gmbh.de schrieb:
Python 2.3.2 (#49, Oct 2 2003, 20:02:00) [MSC v.1200 32 bit (Intel)] on win32 .>>> print 'ölwännchen'.upper() öLWäNNCHEN Das gleiche mit Python 2.4.1 auf Win32. Warum benutzt du keine Unicode-Strings?
Weil es auch nicht hilft:
s = u'ölwännchen' print s, s.upper() ölwännchen öLWäNNCHEN
Ah, das ist also dein Problem. Deine Konsole ist falsch eingestellt. Das hat nichts mit Python zu tun. Was du da angezeigt bekommst, ist die UTF-8 Ausgabe deines Strings (also auch eine Unicode-Darstellung). Das ist wunderbar in Ordnung, wenn deine Konsole (oder Eingabeaufforderung, oder wie auch immer) das auch ausgeben kann. Kann sie aber anscheinend nicht, sie scheint ISO-8859-1 zu erwarten.
Ist also ein Windows-Problem, davon habe ich leider nur wenig Ahnung. Aber das sollte dich nicht davon abhalten, das einfach zu benutzen. Nur, weil deine Konsole das nicht anzeigen kann, heißt das nicht, dass Python da irgendwas dran falsch macht.
Stefan
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
On Tuesday 22 November 2005 12:41, Franz Kelnreiter wrote:
Hallo Allerseits, ich bekomme bei dem Beispiel überhaupt nur Nonsens und glaube doch, dass es mit den locals und dem "consolefont" im engeren Sinne zu tun haben muss.
print s
führt in WinXP habe bei mir zu folgendem Error: .. File "C:\Python23\lib\encodings\cp850.py", line 18, in encode return codecs.charmap_encode(input,errors,encoding_map) UnicodeEncodeError: 'charmap' codec cant encode character u'\x94' in position 0: character maps to <undefined>
In Linux 2.6.13-gentoo-r5 fällt das Ganze ein wenig schweigsamer aus und lautet bloß: UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
das ist aber zugegeeben sei ich vor kurzen neu aufgesetzt habe ein xorg.conf Problem, das mir keine de Lokalen in den diversen Konsole-Shells anzeigen will, wohingegen bei anderen XApps hier kein Problem besteht: siehe äÖö߀
Das ist von Hennings Problem unberuehrt und zeigt nur das "uebliche" Fehlerverhalten wenn man probiert unicode-Objekte zu strings zu wandeln, ohne dabei explizit ein encoding vorzugeben. Dann verwendet er naemlich das default-encoding (das unter XP cp850 zu sein scheint, bei mir und dir unter linux aber ascii) - mit dem Ergebnis, das es nicht klappt. Statt print s mach mal print s.encode("latin1") oder print s.encode("utf-8") Dann klappt's.u Diez _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Diez B. Roggisch schrieb:
On Tuesday 22 November 2005 12:41, Franz Kelnreiter wrote:
Hallo Allerseits, ich bekomme bei dem Beispiel überhaupt nur Nonsens und glaube doch, dass es mit den locals und dem "consolefont" im engeren Sinne zu tun haben muss.
print s
führt in WinXP habe bei mir zu folgendem Error: .. File "C:\Python23\lib\encodings\cp850.py", line 18, in encode return codecs.charmap_encode(input,errors,encoding_map) UnicodeEncodeError: 'charmap' codec cant encode character u'\x94' in position 0: character maps to <undefined>
In Linux 2.6.13-gentoo-r5 fällt das Ganze ein wenig schweigsamer aus und lautet bloß: UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
das ist aber zugegeeben sei ich vor kurzen neu aufgesetzt habe ein xorg.conf Problem, das mir keine de Lokalen in den diversen Konsole-Shells anzeigen will, wohingegen bei anderen XApps hier kein Problem besteht: siehe äÖö߀
Das ist von Hennings Problem unberuehrt und zeigt nur das "uebliche" Fehlerverhalten wenn man probiert unicode-Objekte zu strings zu wandeln, ohne dabei explizit ein encoding vorzugeben. Dann verwendet er naemlich das default-encoding (das unter XP cp850 zu sein scheint, bei mir und dir unter linux aber ascii) - mit dem Ergebnis, das es nicht klappt.
Statt
print s
mach mal
print s.encode("latin1")
oder
print s.encode("utf-8")
Ja, richtig. Danke! So läßt sich sogar meine Konsole dazu überreden, dt. Sonderzeichen darzustellen, was derzeit ohne Mitwirkung von Python nicht möglich ist... --Franz
Dann klappt's.u
Diez
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Diez B. Roggisch schrieb:
On Tuesday 22 November 2005 12:41, Franz Kelnreiter wrote:
Hallo Allerseits, ich bekomme bei dem Beispiel überhaupt nur Nonsens und glaube doch, dass es mit den locals und dem "consolefont" im engeren Sinne zu tun haben muss.
print s
führt in WinXP habe bei mir zu folgendem Error: .. File "C:\Python23\lib\encodings\cp850.py", line 18, in encode return codecs.charmap_encode(input,errors,encoding_map) UnicodeEncodeError: 'charmap' codec cant encode character u'\x94' in position 0: character maps to <undefined>
In Linux 2.6.13-gentoo-r5 fällt das Ganze ein wenig schweigsamer aus und lautet bloß: UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
das ist aber zugegeeben sei ich vor kurzen neu aufgesetzt habe ein xorg.conf Problem, das mir keine de Lokalen in den diversen Konsole-Shells anzeigen will, wohingegen bei anderen XApps hier kein Problem besteht: siehe äÖö߀
Das ist von Hennings Problem unberuehrt und zeigt nur das "uebliche" Fehlerverhalten wenn man probiert unicode-Objekte zu strings zu wandeln, ohne dabei explizit ein encoding vorzugeben. Dann verwendet er naemlich das default-encoding (das unter XP cp850 zu sein scheint, bei mir und dir unter linux aber ascii) - mit dem Ergebnis, das es nicht klappt.
Statt
print s
mach mal
print s.encode("latin1")
oder
print s.encode("utf-8") Danke für die Klarstellung. Das war dann von Gerold und Henning falsch wiedergegeben: Statt zB. print s.upper() sollte da natürlich print s.encode("utf-8").upper() gestanden haben, dann hätt ichs auch begriffen...
--franz
Dann klappt's.u
Diez
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Danke für die Klarstellung. Das war dann von Gerold und Henning falsch wiedergegeben: Statt zB. print s.upper() sollte da natürlich print s.encode("utf-8").upper() gestanden haben, dann hätt ichs auch begriffen...
Aeh, nicht ganz: s.upper().encode("utf-8") Denn _erst_ sollte der unicode-upper-mechanismus getestet werden, und _dann_ eine String-Konvertierung erfolgen. Das war ja Sinn der Uebung :) Diez _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
participants (4)
-
Diez B. Roggisch
-
Franz Kelnreiter
-
Henning.Ramm@mediapro-gmbh.de
-
Stefan Behnel