Forum: PC-Programmierung Problem mit der Kodierung von Umlauten


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Martin (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich hab in Python ein Problem mit der Kodierung von Texten.
Das Programm soll Texte verarbeiten. Dabei ist der Vergleich von Worten 
wichtig. Nun bin ich bei einem Text auf folgendes Problem gestoßen:
>>> 'glücklich' == 'glücklich'
False
>>> u'glücklich' == u'glücklich'
False
>>> 'ü' == 'ü'
False
>>> 'glücklich'.decode('utf-8')
u'glu\u0308cklich'
>>> 'glücklich'.decode('utf-8')
u'gl\xfccklich'

Das Beispiel ist stellvertretend für alle Umlaute in diesem Text.
Ich kenne mit leider mit Kodierungen nicht so sehr aus. Gibt es eine 
Möglichkeit das 'andere' ü in ein für mich bekanntes ü zu verwandeln?

Vielen Dank im Voraus
Liebe Grüße
Martin

von Daniel A. (daniel-a)


Bewertung
0 lesenswert
nicht lesenswert
Du hast einen text im format ISO 8859-1 (extended ascii) und einen in 
UTF-8.

Speichere entweder alles im felben Format, wobei ich utf8 empfehle, oder 
ermittle die Kodierung im python script und convertiere es ensprechend. 
In python sind mir die funktionen encode und decode ein rätsel. Beim 
Konvertieren gibt es immer ein Quell und ein Zielvormat, die encode und 
decode funktionen enthalten aber nicht beide. Versuch mal die encode 
function, viel glück! Kodierungsprobleme sind immer die Hölle.

von g457 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
unicodedata.normalize() regelt:
>>> import unicodedata
>>> unicodedata.normalize('NFC', u'Glu\u0308cklich')
u'Gl\xfccklich'
>>> unicodedata.normalize('NFC', u'Gl\xfccklich')
u'Gl\xfccklich'
>>> unicodedata.normalize('NFC', u'Glu\u0308cklich') == unicodedata.normalize('NFC', u'Gl\xfccklich')
True

Rest steht in der Doku.

HTH

von Martin (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Super, Vielen Dank!
War schon am verzweifeln.. aber damit klappt alles.

Vielen Dank nochmal!
lg
Martin

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.