Umlaute in Pyscripter

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
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

BlackJack hat geschrieben:@snafu: Um diesen Quatsch muss sich der Benutzer immer selber kümmern. Das ist auch unabhängig von Python 2 vs. Python 3.
Dem Benutzer kann aber eine sinnvolle Voreinstellung an die Hand gegeben werden (also UTF-8 statt ASCII), oder liege ich damit jetzt völlig falsch?
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

snafu hat geschrieben:Dem Benutzer kann aber eine sinnvolle Voreinstellung an die Hand gegeben werden (also UTF-8 statt ASCII), oder liege ich damit jetzt völlig falsch?
Microsoft hat UTF-8 erst sehr spät als Standard anerkannt (wohl eher zähneknischend), ich glaube es wird erst seit SP3 für XP oder gar Vista als Option angeboten. Bei UTF-16 vs UFT-32 geht Windows auch einen anderen Weg, d.h. nichtmal die interne Unicoderepräsentation in Python ist gleich zu Linuxdistributionen. Das Encoding-Gewurschtel ist schon ziemlich nervig.
Jeder, der da nun ein Tool, IDE oder was auch immer schreiben will, welches plattformübergreifend funktionieren soll, muss zwangsläufig diese Eigenheiten beachten.

@Kebap:
Hmm, das würde ich jetzt doch als Bug von PyScripter ansehen, da scheint weder Input- noch Outputencoding der Shell gesetzt zu sein.
Stell den Editor bitte mal auf ANSI um und erstell die Datei neu, d.h. schreib die Umlaute von der Tastatur aus. Als coding-Directive würde ich cp1252 und cp850 probieren. Wie geht er mit Unicodestrings aus der Datei in der Shell um?
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Hi jerch,

wenn ich folgende Datei als ANSI speichere:

Code: Alles auswählen

# -*- coding: cp1252 -*-
print "äöü"
erhalte ich diesen Output:

Code: Alles auswählen

*** Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32. ***
*** Remote Python engine  is active ***
>>> 
*** Remote Interpreter Reinitialized  ***
>>> 
äöü
>>> print "äöü"
äöü
>>> 
Anscheinend funktioniert also schonmal irgendwas, wenn auch kein UTF-8..
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Ah das ist gut. Kannst Du die Shelleingabe auch umstellen? Dann sollte der Bytesalat am Ende auch verschwinden.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

jerch hat geschrieben:
snafu hat geschrieben:Dem Benutzer kann aber eine sinnvolle Voreinstellung an die Hand gegeben werden (also UTF-8 statt ASCII), oder liege ich damit jetzt völlig falsch?
Microsoft hat UTF-8 erst sehr spät als Standard anerkannt (wohl eher zähneknischend), ich glaube es wird erst seit SP3 für XP oder gar Vista als Option angeboten. Bei UTF-16 vs UFT-32 geht Windows auch einen anderen Weg, d.h. nichtmal die interne Unicoderepräsentation in Python ist gleich zu Linuxdistributionen. Das Encoding-Gewurschtel ist schon ziemlich nervig.
Jeder, der da nun ein Tool, IDE oder was auch immer schreiben will, welches plattformübergreifend funktionieren soll, muss zwangsläufig diese Eigenheiten beachten.

Code: Alles auswählen

encoding = 'cp1252' if on_windows else 'utf-8'
...eine simple Zeile für eine Voreinstellung, die unter Umständen viele Probleme lösen kann.

Naja, will mich jetzt nicht dran aufhängen...
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

snafu hat geschrieben:

Code: Alles auswählen

encoding = 'cp1252' if on_windows else 'utf-8'
...eine simple Zeile für eine Voreinstellung, die unter Umständen viele Probleme lösen kann.

Naja, will mich jetzt nicht dran aufhängen...
Damit deckst Du nur die Westeuropäischen Sprachen ab. Der Nutzer könnte genauso gut kyrillische Strings ausgeben wollen (cp1251). Eben deshalb muss sich der Nutzer bei Verwenden einer lokalisierten Charmap selbst drum kümmern.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

jerch hat geschrieben:
snafu hat geschrieben:

Code: Alles auswählen

encoding = 'cp1252' if on_windows else 'utf-8'
...eine simple Zeile für eine Voreinstellung, die unter Umständen viele Probleme lösen kann.

Naja, will mich jetzt nicht dran aufhängen...
Damit deckst Du nur die Westeuropäischen Sprachen ab. Der Nutzer könnte genauso gut kyrillische Strings ausgeben wollen (cp1251). Eben deshalb muss sich der Nutzer bei Verwenden einer lokalisierten Charmap selbst drum kümmern.
Ok, das stimmt. In Windows ist es stark spezialisiert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Kebap hat geschrieben:wenn ich folgende Datei als ANSI speichere:

Code: Alles auswählen

# -*- coding: cp1252 -*-
print "äöü"
Erstens ist ANSI kein Encoding, das wäre höchstens ASCII und zweitens ist diese Datei kein ASCII weil sie Umlaute erhält. Wie es mich immer aufregt, wenn Softwareautoren alle möglichen Begriffe "der vereinfachung halber" zusammenwerfen, so dass man immer selbst prüfen muss, was sich der Autor denn nun wieder gedacht hat.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Folgendes funktioniert im Direktfenster auch:

Code: Alles auswählen

>>> print u"äöü"
äöü
Naja, damit werde ich wohl erstmal leben müssen.. :K
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Antworten