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.
DasIch hat geschrieben:Das liegt daran dass in Python 3.0 Unicode Strings statt Bytecode Strings verwendet werden.
Danke, das hilft mir schon weiter.
Wie schreibe ich dann aber diese Zeile(n) so, dass weder der Editor eine Fehlermeldung liefert noch die Shell die falsche Ausgabe erzeugt und das Ganze auch noch im Sinne des Erfinders ist?
Oder muss ich unter Configure Idle den Wert für "Default Source Encoding" auf "utf-8" oder "Locale-defined" stellen und auf die coding-Zeile verzichten?
jokoko hat geschrieben:Oder muss ich unter Configure Idle den Wert für "Default Source Encoding" auf "utf-8" oder "Locale-defined" stellen und auf die coding-Zeile verzichten?
Guck mal, obs ohne IDLE geht, denn eigentlich sollte das in Python3 erst recht keine Probleme machen
Python supports writing source code in UTF-8 by default, but you can use almost any encoding if you declare the encoding being used. This is done by including a special comment as either the first or second line of the source file
Meine ursprüngliche Frage ist - wenn ich es richtig verstanden habe - aber noch nicht beantwortet: Warum liefert idle 3.0 keine korrekte Ausgabe der Umlaute, wenn ich auf westeuropäischen Code umschalte?
Vielen Dank auf jeden Fall schon mal für die vielen schnellen Antworten - ihr seid super!
@jokoko: Du schaltest ja nirgends um. Der Kommentar sagt Python nur in welcher Kodierung der Quelltext gespeichert ist und in der Kodierung sollter er dann auch wirklich gespeichert sein. Du hast Python gesagt der Quelltext sei cp1252 wo er in Wirklichkeit aber als UTF-8 gespeichert ist. Wenn Du im Kommentar cp1252 sagst, musst Du Deinem Editor beim speichern halt auch sagen, dass er wirklich als cp1252 abspeichern soll.
BlackJack hat geschrieben:[...]Wenn Du im Kommentar cp1252 sagst, musst Du Deinem Editor beim speichern halt auch sagen, dass er wirklich als cp1252 abspeichern soll.
Ich möchte ja gerne IDLE verwenden.
Ist folgende Vorgehensweise dann korrekt?
cp1252 in den Kommentar zu schreiben und
unter Options->Configure Idle die Einstellung General->Default Source Encoding->Locale-defined wählen
Sorry, irgendwo hängt's bei mir immer noch (ich bitte schon mal um Entschuldigung...)
Wenn ich unter Options->Configure Idle die Einstellung General->Default Source Encoding->UTF-8 wähle und auf die Encoding-Angabe im Quelltext verzichte, dann gibt es einen SyntaxError: invalid character in identifier.
Wenn ich unter Options->Configure Idle die Einstellung General->Default Source Encoding->None wähle und auf die Encoding-Angabe im Quelltext verzichte, dann gibt es ein I/O-Warning: Non-ASCII found, yet no encoding declared. Add a line like # -*- coding: cp1252 -*-.
Wenn ich diese aber hinzufüge, dann gibt es die im ersten Post berichtete falsche Ausgabe.
(Bei allem geht es nach wie vor um Python 3 und dort nur um die IDLE-Umgebung mit "eingebautem" Editor.
Die einzige Zeile in meinem Programm ist dann nur noch
Die Datei musst Du UTF-8-kodiert speichern. Und hoffen, dass Python herausfinden kann, welche Kodierung das Programm auf der anderen Seite von `sys.stdout` erwartet.
In allen anderen Fällen:
- Stell den Editor auf utf-8
- korrigiere ALLE Sonderzeichen (nur darauf bezieht sich das encoding überhaupt)
- und Lass die "coding:"-Zeile weg (Unter Python 3)
hth, Jörg
Wir haben schon 10% vom 21. Jahrhundert hinter uns!
Ich schließe mich dem ersten "Nein" an - UTF-8 ist der "way to go". Selbst notepad.exe kann das seit Jahren. Zu dem "es sei denn" möchte ich allerdings anmerken, dass es nicht automatisch cp-1252 ist, sondern dann notgedrungen das Encoding, welches der Editor benutzt. Das muss man dann hat einfach herhausfinden. Wahrscheinlich wird es das sein, was auch die Plattform standardmäßig benutzt und das ist wiederum hochgradig Betriebssystem- und Länderabhängig. Wenn's kein deutsches Windows ist, dann ist es auch nicht cp-1252.
da tut sich bei mir noch eine Frage auf:
Basieren die ganzen Hinweise auf "coding Zeile weglassen"
auf irgendeinem style-guide (bitte mit Referenz) oder ist das eine persönliche
Vorliebe?
Bei mir haben alle Python Quellen systematisch eine coding Angabe
(ich bin allerdings noch nicht bei Python 3).
Die coding-Zeile ist in Python 2.x nötig, denn dort ist das Default-Encoding für Quelltext ASCII. Wenn du etwas in der Datei hast was nicht-ASCII ist, ist das entweder eine Warnung oder ein SyntaxError. Daher wird in Python 2.x oft "coding: utf-8" geschrieben. In Python 3 braucht man dies nicht mehr zu machen, denn dort ist das Standardencoding für Dateien nicht mehr ASCII sondern UTF-8, da macht die coding-Zeile keinen Sinn, wenn es sowieso schon UTF-8 ist.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Wenn man aus dem deutschen Tutorial 3.3 sniplets in den IDLE Editor (windows) kopiert, läuft das bei der HTML-Version problemlos. Beim PDF geht zum einen die Einrückung verloren und wenn man das manuell behebt kommt der "invalid character in identifier"-error, obwohl alles o.k. aussieht, z.B. mit ersten sniplet 4.7.1 def ask_ok... Bei der Fehlermeldung wird das "J" in complaint=’Bitte Ja oder Nein!’ rot markiert.
Werden da durch das PDF-Format irgendwelche nicht sichtbaren non-UTF-8-Zeichen mitkopiert oder was ist da los?
@barrio Nein. “Nicht sichtbare non-UTF-8-Zeichen“ ist Blödsinn…
Sieh Dir die Zeichen im Quelltext genau an, insbesondere die Anführungszeichen. Du wirst feststellen, dass im PDF, und mithin auch im daraus kopierten Quelltext nicht der Apostroph ' steht, sondern das rechte einfache Anführungszeichen ’. Woran das liegt, weiß ich nicht, ich nehme an, Sphinx – das Programm, mit dem HTML und PDF erzeugt werden – ersetzt Apostrophe durch diese Anführungszeichen, weil man in normalem Fließtext eigentlich typographisch korrekte Anführungszeichen haben möchte. Nur eben im Quelltext nicht…
Lesson learned: Kopiere Quelltext nie aus PDF-Dokumenten. Die sind nicht zum Kopieren, sondern zum Lesen und Drucken da, und mithin stehen da im Hinblick auf Lesbarkeit und Ästhetik mitunter andere Zeichen, als in syntaktisch korrektem Quelltext eigentlich erforderlich wären.
Und für die Zukunft: Grabe bitte keine uralten Themen für völlig unabhängige Fragen aus. Themen kosten nichts, und Du darfst wirklich gerne neue erstellen, wenn Du Fragen hast.