Seite 1 von 1

unicodesonderzeichen im text

Verfasst: Sonntag 11. Januar 2009, 21:57
von vorlautboy
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!

Verfasst: Sonntag 11. Januar 2009, 22:02
von derdon

Code: Alles auswählen

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

Verfasst: Montag 12. Januar 2009, 01:32
von BlackJack

Code: Alles auswählen

In [9]: u"xyz\\u00a0".decode('unicode-escape')
Out[9]: u'xyz\xa0'

Verfasst: Montag 12. Januar 2009, 08:14
von tordmor
Leerzeichen ist 0x20.

Verfasst: Montag 12. Januar 2009, 09:25
von 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

Verfasst: Montag 12. Januar 2009, 16:38
von tordmor
Im Nachhinein betrachtet denke ich, ich hätte mir sowas denken können :)

Verfasst: Montag 12. Januar 2009, 22:04
von vorlautboy
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.

Verfasst: Montag 12. Januar 2009, 23:25
von BlackJack
Was *genau* meinst Du mit "Π\00a0"!? Bitte die `repr()`-Form. Ansonsten: schon ausprobiert?

Verfasst: Dienstag 13. Januar 2009, 20:29
von vorlautboy
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 :?