Unicodezeichenketten einfach ,,irgendwie'' ausgeben, wie?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
zacharias
User
Beiträge: 11
Registriert: Samstag 2. Juni 2007, 00:36

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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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.
Na irgend ein encoding musst Du schon angeben - wie soll denn das darstellende Programm (vermutlich ne Shell) die Zeichen sonst darstellen?

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)
BlackJack

@zacharias: Zum debuggen ist die `repr()`-Darstellung von Zeichenketten und Unicode-Objekten gut geeignet.
zacharias
User
Beiträge: 11
Registriert: Samstag 2. Juni 2007, 00:36

SCH**SE, natürlich, ist eh ganz simpel!

Code: Alles auswählen

>>> print u"abcde\u2026"
UnicodeEncodeError: ...

>>> print u"abcde\u2026".encode('utf8')
abcdeâŠ
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.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Ich denke, du suchst

Code: Alles auswählen

print `u"\u2026"`
wobei die `` die Kurzform für repl() sind. Das zeigt dir den Unicode-String mit all seinen CodePoints:

Code: Alles auswählen

u'\u2026'
Stefan
Benutzeravatar
b.esser-wisser
User
Beiträge: 272
Registriert: Freitag 20. Februar 2009, 14:21
Wohnort: Bundeshauptstadt B.

wobei die `` die Kurzform für repl() sind.
Das ist in Python 3 abgeschafft worden.
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)
... falls es wen interessiert ;)

hth, Jörg
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

b.esser-wisser hat geschrieben:Das ist in Python 3 abgeschafft worden.
Na und? Das Beispiel war doch für Python 2.x. Unter 3.x gibt es auch keine "u"-Strings mehr.

Stefan
BlackJack

@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!?
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

"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
BlackJack

@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 "`".
Benutzeravatar
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
Wir haben schon 10% vom 21. Jahrhundert hinter uns!
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

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!?
Full ack. Es gibt schon einen Grund, weshalb das in Python 3 abgeschafft wurde.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Antworten