unicodesonderzeichen im text

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
vorlautboy
User
Beiträge: 38
Registriert: Sonntag 7. Dezember 2008, 18:43

hallo leute,

wie kann ich unicodezeichen, die in einem string (utf-8 codiert) als escapesequenzen auftauchen, durch ihr jeweiliges zeichen ersetzen, zb. so:

string: u"xyz\\u00a0"
bzw. ausgabe: xyz\u00a0
wobei \u00a0 = leerzeichen
soll werden zu: u"xyz "

danke für eure antworten!
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Code: Alles auswählen

print u"xyz\u00a0".encode('utf-8')
BlackJack

Code: Alles auswählen

In [9]: u"xyz\\u00a0".decode('unicode-escape')
Out[9]: u'xyz\xa0'
tordmor
User
Beiträge: 100
Registriert: Donnerstag 20. November 2008, 10:29
Wohnort: Stuttgart

Leerzeichen ist 0x20.
http://www.felix-benner.com
BlackJack

@tordmor: Das ist *ein* mögliches Leerzeichen. Es gibt verschiedene.

Code: Alles auswählen

In [11]: unicodedata.name(u'\xa0')
Out[11]: 'NO-BREAK SPACE'
Das von vorlautboy ist also eines an dem der Text nicht umgebrochen werden soll. Praktisch, wenn man zum Beispiel Text wie `ca. 5 Uhr` hat, was extrem blöd aussieht, wenn die drei "Worte" durch einen Zeilenumbruch auseinander gerissen werden.

Hier sind noch ein paar andere Leerzeichen:

u' ' SPACE
u'\xa0' NO-BREAK SPACE
u'\u1680' OGHAM SPACE MARK
u'\u180e' MONGOLIAN VOWEL SEPARATOR
u'\u2000' EN QUAD
u'\u2001' EM QUAD
u'\u2002' EN SPACE
u'\u2003' EM SPACE
u'\u2004' THREE-PER-EM SPACE
u'\u2005' FOUR-PER-EM SPACE
u'\u2006' SIX-PER-EM SPACE
u'\u2007' FIGURE SPACE
u'\u2008' PUNCTUATION SPACE
u'\u2009' THIN SPACE
u'\u200a' HAIR SPACE
u'\u202f' NARROW NO-BREAK SPACE
u'\u205f' MEDIUM MATHEMATICAL SPACE
u'\u3000' IDEOGRAPHIC SPACE
tordmor
User
Beiträge: 100
Registriert: Donnerstag 20. November 2008, 10:29
Wohnort: Stuttgart

Im Nachhinein betrachtet denke ich, ich hätte mir sowas denken können :)
http://www.felix-benner.com
vorlautboy
User
Beiträge: 38
Registriert: Sonntag 7. Dezember 2008, 18:43

BlackJack hat geschrieben:

Code: Alles auswählen

In [9]: u"xyz\\u00a0".decode('unicode-escape')
Out[9]: u'xyz\xa0'
mir fällt gerade auf: ich habe unicodezeichen und unicodeescapezeichen als strings gemischt im text, also z.b. "Π\00a0", ich glaube da funktioniert die oben genannte methode nicht, oder? kann man da trotzdem was machen? bin übrigens mittlerweile bin ich auf python3 umgestiegen.
BlackJack

Was *genau* meinst Du mit "Π\00a0"!? Bitte die `repr()`-Form. Ansonsten: schon ausprobiert?
vorlautboy
User
Beiträge: 38
Registriert: Sonntag 7. Dezember 2008, 18:43

BlackJack hat geschrieben:Was *genau* meinst Du mit "Π\00a0"!?
war ein schlechtes beispiel. ich hatte nur gemeint, dass ich unicodezeichen sowohl als direkte zeichen, als auch als escapesequenzen in stringform im text habe. erstere werden bei S.encode("unicode-escape") zu b"\\uhhhh", letztere zu b"\\\\uhhhh". habe die bytes jetzt aber in ein bytearray kopiert und alle b"\\\\u" durch b"\\u" ersetzt und danach wieder in str umgewandelt (encoding wieder "unicode-escape"). code sieht zwar nicht gut aus, funktioniert aber :?
Antworten