Seite 2 von 2

Re: Problem mit Umlauten bei input()

Verfasst: Sonntag 21. September 2014, 13:13
von Hyperion
snafu hat geschrieben:Es geht darum, einen Python-String mit Encoding A in einen Python-String mit Encoding B umzuwandeln. Das ist ja auch Thema dieses Threads, oder nicht?
Python3 hat aber keine "encodierten Strings" mehr. Es hat eben nur Unicode-Strings. Encodierte "Strings" - ähnlich zu den normalen Strings in Python 2 - sind Bytes! Umcodieren geht also immer so: Bytes →(decode)→ String →(encode)→ Bytes. Wenn bräuchtest Du eine Methode auf Bytes, die den Zwischenschritt in Strings "verschleiert", also in etwa so:

Code: Alles auswählen

def recode(bytes_, source, destination): 
    return bytes_.decode(source).encode(destination)

text = "Döner macht schöner‽"
# nehmen wir an, wie haben Daten in UTF-16:
origin = text.encode("utf16")

# die wollen wir in UTF-8 wandeln:
recode(ursprung, "utf16", "utf8")
> b'D\xc3\xb6ner macht sch\xc3\xb6ner\xe2\x80\xbd'
Ich sehe darin aber wenig "Vorteile", wenn Du musst die Encodings ja so oder so kennen ;-) Und vor allem: Wann arbeitest Du schon durchgängig mit Bytes? IdR. will man intern ja viel öfter mit Strings arbeiten und hat das Problem des unmittelbaren De- und Encodings ja gar nicht.

Viel sinnvoller wäre imho ein (optionaler) Parameter bei der ``print``-Methode zur Angabe des Zielencodings! Und natürlich ein fixes Default-Encoding, statt dieses System abhängigen Unsinns.

Re: Problem mit Umlauten bei input()

Verfasst: Sonntag 21. September 2014, 13:26
von snafu
OK, ich nehme meine Idee wieder zurück. Ich hatte nicht bedacht, dass die eigentliche Ausgabe ja auf Bytes erfolgt.