Seite 1 von 1
utf-8 encoding
Verfasst: Sonntag 31. Juli 2011, 11:14
von Barcellona
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?
Re: utf-8 encoding
Verfasst: Sonntag 31. Juli 2011, 11:24
von cofi
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).
Re: utf-8 encoding
Verfasst: Sonntag 31. Juli 2011, 11:26
von Hyperion
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

Re: utf-8 encoding
Verfasst: Sonntag 31. Juli 2011, 11:54
von Barcellona
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.

Re: utf-8 encoding
Verfasst: Sonntag 31. Juli 2011, 12:47
von Hyperion
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.