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

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

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

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.