Re: UTF-8-Konsole Windows
Verfasst: Mittwoch 16. Oktober 2013, 09:55
@Blackjack:
Finde ich nicht. Meiner Meinung nach liegt hier der „Fehler“ ganz klar in der Windows-Konsole, die eben nicht vernünftig weiterentwickelt wird (bzw. im Gegensatz zum restlichen System kein Unicode verwendet; wobei Windows ja normalerweise wohl UTF-16 verwendet, aber das ist ja auch kein Problem).
Mittlerweile speichern doch die meisten (gut geschriebenen) Programme standardmäßig ihre Dateien als UTF-8. Würdest du da auch sagen, dass sie das nicht machen sollten und sich der Benutzer darum kümmern muss? Letztendlich ist es doch sinnvoll, wenn irgendwann mal alles aus Unicode besteht, da es einfach die gesamte Zeichenkodierungssache unglaublich vereinfacht. Nur bei ganz ganz wenigen Sachen ist eine alte, einfache Kodierung vielleicht noch sinnvoll (Mir käme da z.B. gerade ein Text-LCD, was man mit dem PC verbindet, in den Sinn: Das hat ja eh nur einen beschränkten Zeichenvorrat und dort ist vielleicht intern die Dekodierung von UTF-8 zu aufwändig (wobei man dann allerdings auch einfach UTF-16 verwenden könnte, aber nun gut)). Aber bei normalen Computeranwendungen sehe ich absolut gar keinen Vorteil von Nicht-Unicode-Kodierungen gegenüber Unicode: Irgendwann kommt immer der Punkt, wo ein Benutzer dann doch mal irgendein „exotisches“ Zeichen eingeben möchte, und seien es nur die Anführungszeichen „“ oder ein Name mit einem ć drin. Wie ich bei sehr vielen Programmen erlebt habe, hat dann letztendlich der Programmierer wieder genau diesen einen Fall doch nicht bedacht und es gibt Probleme. Wenn alles auf Unicode läuft, klappt es einfach ohne Probleme.
Natürlich müssen alle anderen Programme auch unter Unicode laufen, aber genau das sollte letztendlich das Ziel sein (Ich sage nicht, dass Unicode der Weisheit letzter Schluss ist, aber es gibt halt im Moment nichts ernstzunehmendes Alternatives).
Daher ist nicht Python 3 das Problem, sondern die Windows-Konsole. Wie man eben sieht, läuft es unter Linux ohne Probleme (unter MacOS weiß ich nicht, aber ich denke dort auch). Bei Python 3 hat man den Vorteil, dass es eben automatisch in Unicode läuft, bei Python 2 gibt es bestimmt einige Leute, die das Thema dann ignorieren, weil es sie selber nicht betrifft (Davon gibt es unglaublich viele Programme im Internet). Wobei ich mich zugebenermaßen noch nicht wirklich mit den ganzen Sachen beschäftigt habe, ich bin im Moment erst noch dabei, halbwegs lauffähige Programme zu entwickeln
@jens:
Ja, mit chcp 65001 klappt es. Allerdings kommen dann am Ende der Ausgabe immer zusätzlich irgendwelche merkwürdigen Zeichen. Da muss ich noch mal etwas schauen. Scheint aber schon mal der richtige Weg zu sein (hoffe ich).
@Sirius:
Das ist UTF-16. Das stimmt nicht weitesgehend mit Unicode überein, sondern ist einfach Unicode, mit dem Unterschied, dass einfach alle Zeichen in zwei Bytes kodiert werden (Ergibt dann ca. 65000 Zeichen. Aber selbst das reicht nicht mehr aus, deswegen kann man dort mit speziellen Zeichen noch mehr Zeichen speichern). UTF-8 ist variabel in der Länge, man muss dann allerdings oft etwas komplizierter schauen, was genau ein Zeichen ist.
Unicode ist die Tabelle, wo alle Zeichen drin stehen. Davon gibt es dann mehrere Kodierungen, die diese Tabelle auf Bytes abbilden: UTF-7 (7 Bit), UTF-8 (8 Bit), UTF-16 (16 Bit), UTF-32 (32 Bit). Das ist aber alles Unicode.
UTF-8 hat sich bei der normalen Datenspeicherung durchgesetzt, weil es ASCII-kompatibel ist (ASCII ist einfach ein Subset von UTF-8). Bei UTF-16 ist das nicht der Fall, deswegen nutzt man das normalerweise nicht zur Speicherung, sondern wird intern von Windows verwendet. Außerdem braucht man bei UTF-16 die Angabe von Big oder Little Endian, bei UTF8 ist das nicht der Fall.
Finde ich nicht. Meiner Meinung nach liegt hier der „Fehler“ ganz klar in der Windows-Konsole, die eben nicht vernünftig weiterentwickelt wird (bzw. im Gegensatz zum restlichen System kein Unicode verwendet; wobei Windows ja normalerweise wohl UTF-16 verwendet, aber das ist ja auch kein Problem).
Mittlerweile speichern doch die meisten (gut geschriebenen) Programme standardmäßig ihre Dateien als UTF-8. Würdest du da auch sagen, dass sie das nicht machen sollten und sich der Benutzer darum kümmern muss? Letztendlich ist es doch sinnvoll, wenn irgendwann mal alles aus Unicode besteht, da es einfach die gesamte Zeichenkodierungssache unglaublich vereinfacht. Nur bei ganz ganz wenigen Sachen ist eine alte, einfache Kodierung vielleicht noch sinnvoll (Mir käme da z.B. gerade ein Text-LCD, was man mit dem PC verbindet, in den Sinn: Das hat ja eh nur einen beschränkten Zeichenvorrat und dort ist vielleicht intern die Dekodierung von UTF-8 zu aufwändig (wobei man dann allerdings auch einfach UTF-16 verwenden könnte, aber nun gut)). Aber bei normalen Computeranwendungen sehe ich absolut gar keinen Vorteil von Nicht-Unicode-Kodierungen gegenüber Unicode: Irgendwann kommt immer der Punkt, wo ein Benutzer dann doch mal irgendein „exotisches“ Zeichen eingeben möchte, und seien es nur die Anführungszeichen „“ oder ein Name mit einem ć drin. Wie ich bei sehr vielen Programmen erlebt habe, hat dann letztendlich der Programmierer wieder genau diesen einen Fall doch nicht bedacht und es gibt Probleme. Wenn alles auf Unicode läuft, klappt es einfach ohne Probleme.
Natürlich müssen alle anderen Programme auch unter Unicode laufen, aber genau das sollte letztendlich das Ziel sein (Ich sage nicht, dass Unicode der Weisheit letzter Schluss ist, aber es gibt halt im Moment nichts ernstzunehmendes Alternatives).
Daher ist nicht Python 3 das Problem, sondern die Windows-Konsole. Wie man eben sieht, läuft es unter Linux ohne Probleme (unter MacOS weiß ich nicht, aber ich denke dort auch). Bei Python 3 hat man den Vorteil, dass es eben automatisch in Unicode läuft, bei Python 2 gibt es bestimmt einige Leute, die das Thema dann ignorieren, weil es sie selber nicht betrifft (Davon gibt es unglaublich viele Programme im Internet). Wobei ich mich zugebenermaßen noch nicht wirklich mit den ganzen Sachen beschäftigt habe, ich bin im Moment erst noch dabei, halbwegs lauffähige Programme zu entwickeln

@jens:
Ja, mit chcp 65001 klappt es. Allerdings kommen dann am Ende der Ausgabe immer zusätzlich irgendwelche merkwürdigen Zeichen. Da muss ich noch mal etwas schauen. Scheint aber schon mal der richtige Weg zu sein (hoffe ich).
@Sirius:
Das ist UTF-16. Das stimmt nicht weitesgehend mit Unicode überein, sondern ist einfach Unicode, mit dem Unterschied, dass einfach alle Zeichen in zwei Bytes kodiert werden (Ergibt dann ca. 65000 Zeichen. Aber selbst das reicht nicht mehr aus, deswegen kann man dort mit speziellen Zeichen noch mehr Zeichen speichern). UTF-8 ist variabel in der Länge, man muss dann allerdings oft etwas komplizierter schauen, was genau ein Zeichen ist.
Unicode ist die Tabelle, wo alle Zeichen drin stehen. Davon gibt es dann mehrere Kodierungen, die diese Tabelle auf Bytes abbilden: UTF-7 (7 Bit), UTF-8 (8 Bit), UTF-16 (16 Bit), UTF-32 (32 Bit). Das ist aber alles Unicode.
UTF-8 hat sich bei der normalen Datenspeicherung durchgesetzt, weil es ASCII-kompatibel ist (ASCII ist einfach ein Subset von UTF-8). Bei UTF-16 ist das nicht der Fall, deswegen nutzt man das normalerweise nicht zur Speicherung, sondern wird intern von Windows verwendet. Außerdem braucht man bei UTF-16 die Angabe von Big oder Little Endian, bei UTF8 ist das nicht der Fall.