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

unicodesonderzeichen im text

Beitragvon vorlautboy » Sonntag 11. Januar 2009, 21:57

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

Beitragvon derdon » Sonntag 11. Januar 2009, 22:02

Code: Alles auswählen

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

Beitragvon BlackJack » Montag 12. Januar 2009, 01:32

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

Beitragvon tordmor » Montag 12. Januar 2009, 08:14

Leerzeichen ist 0x20.
BlackJack

Beitragvon BlackJack » Montag 12. Januar 2009, 09:25

@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

Beitragvon tordmor » Montag 12. Januar 2009, 16:38

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

Beitragvon vorlautboy » Montag 12. Januar 2009, 22:04

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

Beitragvon BlackJack » Montag 12. Januar 2009, 23:25

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

Beitragvon vorlautboy » Dienstag 13. Januar 2009, 20:29

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 :?

Wer ist online?

Mitglieder in diesem Forum: harryberlin