utf-8 encoding

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.
Antworten
Barcellona
User
Beiträge: 74
Registriert: Dienstag 25. Mai 2010, 12:10

Hallo zusammen,

ich möchte mit raw_input() einen String einlesen und diesen in utf-8 kodieren.
Und zwar soll das spanische Wort "mañana" eingegeben werden und dann im Skript
verglichen werden. (sinnfreie Aufgabe, es geht mir nur darum, dass das encoding stimmt...)

Also:

Code: Alles auswählen

# -*- coding: utf-8 -*-

text=raw_input()

# Wie wandel ich hier den Text in utf-8 um?
# text = text.encode("utf-8")   # funktioniert nicht; ñ bringt einen Fehler

if text=="mañana":
   print "OK"
Jemand eine Idee?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Du solltest Unicode im Programm nutzen und erst kodieren wenn es noetig wird. D.h. "mañana" → u"mañana".

Zum eigtl Problem: Du musst wissen, welches Encoding das Terminal liefert. Unter Windows koennte das z.B. "cp1252" sein. Dieser String ist schon kodiert, du brauchst nicht `encode` sondern `decode` (und danach wieder `encode`, wenn du an Strings festhalten willst).
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wieso willst Du intern im Script einen Vergleich zu einem Byte-String fahren? Gibt es da einen bestimmten Grund, wieso Du das nicht mit Unicode lösen willst?

Hint: utf-8 != Unicode!

Schau mal in meine Sig zum besseren Verständnis :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Barcellona
User
Beiträge: 74
Registriert: Dienstag 25. Mai 2010, 12:10

Danke!

Der Artikel in dem Link war echt sehr interessant.

Diese Zeile brachte mir dann auch die Lösung:
encoding_console=sys.stdout.encoding

Hab' ich dann dekodiert und in utf-8 kodiert (muss mit utf-8 arbeiten).

"cp850" war übrigens das Encoding meiner Windows-Konsole. :D
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Barcellona hat geschrieben:D
Hab' ich dann dekodiert und in utf-8 kodiert (muss mit utf-8 arbeiten).
Darf ich da doch noch mal nachfragen, warum? Ich tue das nicht, weil ich hier Besserwisserisch auftreten will, sondern weil ich da sicher gehen will, dass Du das wirklich verstanden hast :-) Und wenn man selber eine fundierte Begründung geben muss, so fördert das das eigene Verständnis.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten