Habe folgendes Problem:
Ich habe ,,Debugmeldungen'' auszugeben, die auch gleich das Wort mitangeben, um das es geht. Diese Worte sind allerdings Unicodezeichenketten, die buchstäblich irgendwas enthalten können, und natürlich hab ich die diversen Unicode-Exceptions, wenn ich das einfach so raushau.
Meine Frage: Gibt es eine Methode, Unicode ,,irgendwie'' auszugeben, und sei es in der Form abcd\uXXXXfghi? Einfach so, ohne dass Python stehenbleibt oder - wenn ich die Exception abfang - das Wort nicht anzeigt? Ich brauche kein Encoden in irgendein latin-1 oder so, einfach nur das Wort auf den Terminal raushauen, und aus.
Unicodezeichenketten einfach ,,irgendwie'' ausgeben, wie?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Na irgend ein encoding musst Du schon angeben - wie soll denn das darstellende Programm (vermutlich ne Shell) die Zeichen sonst darstellen?zacharias hat geschrieben: Meine Frage: Gibt es eine Methode, Unicode ,,irgendwie'' auszugeben, und sei es in der Form abcd\uXXXXfghi? Einfach so, ohne dass Python stehenbleibt oder - wenn ich die Exception abfang - das Wort nicht anzeigt? Ich brauche kein Encoden in irgendein latin-1 oder so, einfach nur das Wort auf den Terminal raushauen, und aus.
Für Dich sollte es das beste sein, in utf-8 zu codieren. Das kann afaik alle Unicode-Zeichen darstellen. (Natürlich wirste in ner Shell dann Platzhalter vorfinden, wenn diese dieses Encoding nicht darstellen kann)
@zacharias: Zum debuggen ist die `repr()`-Darstellung von Zeichenketten und Unicode-Objekten gut geeignet.
SCH**SE, natürlich, ist eh ganz simpel!
Okay, guat, klassischer Fall von Betriebsblindheit... Ich bitte um Nachsicht.
BlackJack: Und deine Lösung ist genau das, was ich brauch. Besten Dank. Irgendwie hab ich nicht die richtigen Suchbegriffe für'n Gugl erwischt, wie's ausschaut.
Code: Alles auswählen
>>> print u"abcde\u2026"
UnicodeEncodeError: ...
>>> print u"abcde\u2026".encode('utf8')
abcdeâŠ
BlackJack: Und deine Lösung ist genau das, was ich brauch. Besten Dank. Irgendwie hab ich nicht die richtigen Suchbegriffe für'n Gugl erwischt, wie's ausschaut.
Ich denke, du suchst
wobei die `` die Kurzform für repl() sind. Das zeigt dir den Unicode-String mit all seinen CodePoints:
Stefan
Code: Alles auswählen
print `u"\u2026"`
Code: Alles auswählen
u'\u2026'
- b.esser-wisser
- User
- Beiträge: 272
- Registriert: Freitag 20. Februar 2009, 14:21
- Wohnort: Bundeshauptstadt B.
Das ist in Python 3 abgeschafft worden.wobei die `` die Kurzform für repl() sind.
Aber es gibt noch ein paar andere, ähnliche Sachen:
Code: Alles auswählen
"lange Fehlermeldung: %r" % u"Foo" # das "%r" für repr()
"Meldung: {0!r}".format(VARIABLE)
hth, Jörg
@sma: Selbst unter 2.x benutzt das keiner ernsthaft. Was hat Dich bloss geritten diesen unleserlichen Sch*#$ ernsthaft vorzuschlagen, wo `repr()` doch schon genannt wurde!?
"Keiner" ist nicht korrekt, denn ich benutze es gerne. Und wieso soll es unleserlich sein? Du selbst benutzt `` als Pseusdo-Markdown hier immer wieder im Forum. Wenn ich schnell eine Debug-Ausgabe brauche, tippt sich nun mal print `x` einfacher als print repr(x). Ich verstehe die Aufregung nicht.
Stefan
Stefan
@sma: Ich benutze es als Pseudo-reStructuredText.
Aber da ist auch egal was ich benutze, denn `x`, ´x´, oder 'x' macht für den Leser keinen grossen Unterschied. Diese drei Varianten kann man aber schnell mal verwechseln, wenn man einen Zeichensatz verwendet, bei dem man das nicht so genau sieht. "Warum geht denn JAHR='date +%y' nicht!? Das steht genau so im Tutorial." ist ein Satz den man öfter mal in Foren zur Bash-Programmierung sieht. "Often hard to read" wird auch als Begründung angegeben warum das in Python3 verschwunden ist.
Des weiteren kann man nach "repr" leichter in der Dokumentation suchen als nach "`".
Aber da ist auch egal was ich benutze, denn `x`, ´x´, oder 'x' macht für den Leser keinen grossen Unterschied. Diese drei Varianten kann man aber schnell mal verwechseln, wenn man einen Zeichensatz verwendet, bei dem man das nicht so genau sieht. "Warum geht denn JAHR='date +%y' nicht!? Das steht genau so im Tutorial." ist ein Satz den man öfter mal in Foren zur Bash-Programmierung sieht. "Often hard to read" wird auch als Begründung angegeben warum das in Python3 verschwunden ist.
Des weiteren kann man nach "repr" leichter in der Dokumentation suchen als nach "`".
- b.esser-wisser
- User
- Beiträge: 272
- Registriert: Freitag 20. Februar 2009, 14:21
- Wohnort: Bundeshauptstadt B.
Ich wollte das mit Python 3 nur mal gesagt haben - deshalb der Nachsatz - ich wollte eigentlich keinen riesen Streit vom Zaun brechen.
Aber ich mag die `auch nicht besonders- liegt aber daran, dass ich die Taste als 'dead key', für À und Konsorten, konfiguriert habe und so immer zwei Tasten dafür drücken muss (ich benutze auch bei Shell-scripten lieber "$(...)", ist auffälliger).
Gruß, Jörg
Aber ich mag die `auch nicht besonders- liegt aber daran, dass ich die Taste als 'dead key', für À und Konsorten, konfiguriert habe und so immer zwei Tasten dafür drücken muss (ich benutze auch bei Shell-scripten lieber "$(...)", ist auffälliger).
Gruß, Jörg
Wir haben schon 10% vom 21. Jahrhundert hinter uns!
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Full ack. Es gibt schon einen Grund, weshalb das in Python 3 abgeschafft wurde.BlackJack hat geschrieben:@sma: Selbst unter 2.x benutzt das keiner ernsthaft. Was hat Dich bloss geritten diesen unleserlichen Sch*#$ ernsthaft vorzuschlagen, wo `repr()` doch schon genannt wurde!?