@mechanicalStore: Bei dem hier…
Code: Alles auswählen
directly_utf8_encoded_text = u'Worte über Worte'
directly_utf8_encoded_text = 'Worte über Worte'
…bedeutet das tatsächlich beides das gleiche, weil das u als Präfix in Python 3 keine Funktion hat. Das ist syntaktisch erlaubt, um es einfacher zu machen alten Python 2 Quelltext zu portieren, wo dieser Präfix tatsächlich einen Unterschied macht. In Python 2 ist der b-Präfix dafür ohne Wirkung/Funktion, der in Python 3 aber einen Unterschied macht.
Der Name in dem Beispiel ist Falsch, weil das `encoded` darin nicht stimmt und auch das UTF-8 zwar stimmen kann, aber nicht muss.
Wenn Dein Editor auf UTF-8 eingestellt ist, dann ist der Quelltext als UTF-8 kodierte Bytefolge in der Datei. Wie die Zeichenkette dann im Speicher vorliegt ist nicht definiert. Das ist ein Implementierungsdetail. Und in aktuellen CPython-Versionen gibt da sogar nicht nur eine Kodierung die immer für alle Zeichenketten verwendet wird. Aber das sind alles Interna, die den Programmierer nicht wirklich etwas angehen.
Das nicht-ASCII-Zeichen nicht in Bytekettenliteralen erlaubt sind, ist eine Entscheidung der Python-Entwickler. Und die würde ja im “Widerspruch“ zu *jeder* Kodierungseinstellung im Editor stehen, ausser ASCII — sofern man das irgendwie als Widerspruch auffassen/sehen will. Ich sehe das als Feature, das man expliziter sein muss was da genau drin sein soll und das auch nicht so leicht falsch machen kann, wenn man mal etwas aus einer Datei in eine andere kopiert wo ja auch keine Kodierungsinformationen übertragen werden, sondern nur Text.