Seite 1 von 1
kleine Frage zu '' replace() ''
Verfasst: Sonntag 29. Oktober 2006, 10:35
von EnTeQuAk
Hallo!
Ich muss in einer Variable '' content '' mehrere Sachen ersetzen. Sie soll als HTML ausgegeben werden wordurch ich Sachen wie '' äÄöÖüÜ '' ersetzen muss.
Wie ich mitbekommen kann ich das nicht einfach mit
Code: Alles auswählen
>>> content = 'üÜöÖäÄ'
>>> content.replace('ä', 'ä', 'Ä', 'Ä', 'ü', 'ü', 'Ü', 'Ü', 'ö', 'ö', 'Ö', 'Ö')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: replace() takes at most 3 arguments (12 given)
Wie könnte ich das lösen? Gibt es fertige Module dafür?
MfG EnTeQuAk
Verfasst: Sonntag 29. Oktober 2006, 10:51
von BlackJack
Bei der `encode()`-Methode von Unicode-Objekten kann man verschiedene Möglichkeiten wählen, was passieren soll, wenn ein Zeichen in der gewünschten Kodierung nicht dargestellt werden kann. Unter anderem kann man sie durch "XML character references" darstellen lassen:
Code: Alles auswählen
In [11]: print a
üÜöÖäÄ
In [12]: a.encode('ASCII', 'xmlcharrefreplace')
Out[12]: 'üÜöÖäÄ'
Verfasst: Sonntag 29. Oktober 2006, 11:11
von Y0Gi
Das erste Codestück funktioniert in dieser Form wie gedacht (ist aber nicht die optimale Lösung):
Code: Alles auswählen
for old, new in (
('ä', 'ä'),
('Ä', 'Ä'),
('ü', 'ü'),
('Ü', 'Ü'),
('ö', 'ö'),
('Ö', 'Ö')):
content = content.replace(old, new)
Verfasst: Sonntag 29. Oktober 2006, 12:16
von EnTeQuAk
Gut

Yogis Lösung... klappt schonmal nicht so, wie ich es dachte.
Aber die von BlackBird schaut doch sehr schön aus
Allerdings erhalte ich in der Console einen Fehler:
Code: Alles auswählen
>>> a = 'üÜöÖäÄ'
>>> print a
üÜöÖäÄ
>>> a.encode('ASCII', 'xmlcharrefreplace')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
Woran liegt das?
MfG EnTeQuAk
Verfasst: Sonntag 29. Oktober 2006, 12:23
von Crush
Code: Alles auswählen
>>> a = u'üÜöÖäÄ'
>>> a.encode('ASCII', 'xmlcharrefreplace')
'üÜöÖäÄ'
>>>
wenn a ein unicode-String ist, sollte es klappen.
Crush
Verfasst: Sonntag 29. Oktober 2006, 13:34
von BlackJack
Das Ergebnis von Deinem `encode()` glaube ich nicht.

Verfasst: Sonntag 29. Oktober 2006, 13:39
von EnTeQuAk
Is aber so
Aber so weit ich es jetz geschafft habe klappt die Variante von Crush ganz gut.
Allerdings hab ichs mir doch noch etwas "einfacher" und "erweiterbarer" gemacht.
Also Danke schonmal für die Hilfe!
MfG EnTeQuAk
Verfasst: Sonntag 29. Oktober 2006, 15:48
von Crush
BlackJack hat geschrieben:Das Ergebnis von Deinem `encode()` glaube ich nicht.

edit: argh... erwischt
aber nun doch noch die Frage: wie konntest du das ganze weiter oben posten (die Ausgabe), ohne dass die Zeichencodes durch "öÖü..." ersetzt werden?!
Crush
Verfasst: Sonntag 29. Oktober 2006, 21:59
von BlackJack
Äh, hab ich eben einfach gemacht. In [ code ]-Blöcken werden diese character references nicht interpretiert, also das & vom Board escaped.