Problem mit Umlauten bei input()

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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

OK, ich nehme meine Idee wieder zurück. Ich hatte nicht bedacht, dass die eigentliche Ausgabe ja auf Bytes erfolgt.
Antworten