Seite 1 von 1

Unicodezeichenketten einfach ,,irgendwie'' ausgeben, wie?

Verfasst: Donnerstag 19. November 2009, 18:22
von zacharias
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.

Re: Unicodezeichenketten einfach ,,irgendwie'' ausgeben, wie

Verfasst: Donnerstag 19. November 2009, 18:37
von Hyperion
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)

Verfasst: Donnerstag 19. November 2009, 20:11
von BlackJack
@zacharias: Zum debuggen ist die `repr()`-Darstellung von Zeichenketten und Unicode-Objekten gut geeignet.

Verfasst: Donnerstag 19. November 2009, 20:12
von zacharias
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.

Verfasst: Freitag 20. November 2009, 12:14
von sma
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

Verfasst: Freitag 20. November 2009, 17:40
von b.esser-wisser
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

Verfasst: Samstag 21. November 2009, 11:01
von sma
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

Verfasst: Samstag 21. November 2009, 11:12
von 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!?

Verfasst: Samstag 21. November 2009, 11:23
von sma
"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

Verfasst: Samstag 21. November 2009, 12:28
von 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 "`".

Verfasst: Samstag 21. November 2009, 18:09
von b.esser-wisser
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

Verfasst: Dienstag 24. November 2009, 22:34
von birkenfeld
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.