Problem mit Umlauten bei input()
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Und was soll diese Methode anderes tun als die ``encode``-Methode von Strings?snafu hat geschrieben:Ich frage mich, wieso Python-3-Strings keine ``.to_encoding()``-Methode haben. Das würde solche Aufgaben besonders für Anfänger erleichtern.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Sie würde ein ``.encode()`` und ``.decode()`` in einem Rutsch machen, wäre leichter zu merken und erfordert weniger Einarbeitung in das Thema. Idealerweise genügt ihr als einziger Parameter das Ziel-Encoding. Das Original-Encoding steht ja bei der Erzeugung des Strings fest. Dessen Name ließe sich leicht merken und wiederverwenden.Hyperion hat geschrieben:Und was soll diese Methode anderes tun als die ``encode``-Methode von Strings?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Kapiere ich irgendwie immer noch nicht! Was soll denn Ziel der Operation sein?
Ein ``encode`` erzeugt doch schon Bytes in einem Zielencoding. Ein ``decode`` macht auf Strings in Python 3 doch gar keinen Sinn, da diese per se Unicode sind...
Ein ``encode`` erzeugt doch schon Bytes in einem Zielencoding. Ein ``decode`` macht auf Strings in Python 3 doch gar keinen Sinn, da diese per se Unicode sind...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
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: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?
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'
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
assert encoding_kapiert