Umlaute in Windows Power Shell

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.
Antworten
didier
User
Beiträge: 11
Registriert: Freitag 18. April 2014, 12:40

Hallo Zusammen
Lerne gerade Python mit Learn Python The Hard Way (geniales Buch für Neulinge), und stolpere da seit in paar Wochen über die Darstellung von Umlauten in der Windows Power Shell.

Folgende Encodings funktionieren zwar in der IDLE auf Windows und auch auf dem iPad und dem Mac. Nur die Power Shell interpretiert die Umlaute (z.B. äüö anders).

Was ich probiert habe:

Code: Alles auswählen

# -*- coding: utf-8 -*-

print "änderung. Öchterüchteri!"

Code: Alles auswählen

# -*- coding: iso-8859-1 -*-

print "üäö"

http://gelb.bcom.at/trac/misc/wiki/Tuto ... eEncodings habe ich mir durchgelesen und auch beherzigt, leider bin ich nicht zum richtigen Ergebnis gelangt.

Könnt Ihr mir evtl. einen Tipp geben?

Hinweis: Code mit Ultra Edit
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Was ist denn das von der PowerShell erwartete Encoding? Ich habe versucht im Internet zu suchen, aber habe da irgendwie nichts brauchbares gefunden. Habe auch kein Windows, also kann jetzt auch nicht nachschauen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
didier
User
Beiträge: 11
Registriert: Freitag 18. April 2014, 12:40

Mit der Anfrage:
[System.Text.Encoding]::Default

Bekomme ich folgende Info von der Power Shell:

IsSingleByte: True
BodyName: iso-8859-1
EncodingName: Westeuropäisch (Windows)
HeaderName: Windows-1252
WebName: Windows-1252
WindowsCodePage: 1252
IsBrowserDisplay: True
IsBrowserSave: True
IsMailNewsDisplay: True
IsMailNewsSave: True
EncoderFallback: System.Text.InternalBestFitFallback
DecoderFallback: System.Text.InternaldDecoderBestFitFallback
IsReadOnly: True
CodePage: 1252

Interpretiere das so, dass die Magicline im Python-Script eigentlich mit iso-8859-1 richtig ausgelesen werden muss. Habe ich probiert und auch ein File im Windows Editor erstellt. Die Ausgabe in der Shell ist trotzdem nicht korrekt.
BlackJack

@didier: Nur um sicherzugehen: Du hast nicht nur den Kommentar geschrieben, sondern den Quelltext auch tatsächlich mit der im Kommentar angegebenen Kodierung gespeichert‽
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Welche Python-Version verwendest du denn? Sofern das Python2 ist, tut das Coding-Cookie momentan nichts (das kommt nur bei Unicode-Strings - `u` Praefix - zum Einsatz) und der Bytestring wird in der Kodierung der Datei ausgegeben.
BlackJack

@cofi: Das der nichts tut bei 2.x wenn x==7 ist, stimmt nicht, der *muss* vorhanden sein wenn man Python 2.7 verwendet und etwas ausserhalb von ASCII im Quelltext hat, und er muss *stimmen*, zumindest in soweit das sich der gesamte Quelltext fehlerfrei damit dekodieren lässt. Denn genau das macht der Compiler.
didier
User
Beiträge: 11
Registriert: Freitag 18. April 2014, 12:40

@blackJack.

Ja. Zumindest bin ich der Meinung, das getan zu haben :D
Deshalb auch der Test im Windows Editor und der Zeile iso-8859-1
Oder benutzt der Editor ein anderes Encoding?

Im UltraEdit habe ich UTF-8 eingestellt.

Benutze Python 2.7.6
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@didier: dem Editor ist die erste Zeile egal. Bei Ultraedit mußt Du für die zweite Datei dann auch als Encoding iso-8859-1 einstellen und nicht utf-8.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Warum ISO-8859-1? Ich würde den Inhalt der Datei in UTF-8 machen und einfach für die Ausgabe in die Shell in ISO-8859-1 machen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
didier
User
Beiträge: 11
Registriert: Freitag 18. April 2014, 12:40

Leonidas hat geschrieben:Warum ISO-8859-1? Ich würde den Inhalt der Datei in UTF-8 machen und einfach für die Ausgabe in die Shell in ISO-8859-1 machen.
Hallo Leonidas
Wie würde ich das machen?
didier
User
Beiträge: 11
Registriert: Freitag 18. April 2014, 12:40

Sirius3 hat geschrieben:@didier: dem Editor ist die erste Zeile egal. Bei Ultraedit mußt Du für die zweite Datei dann auch als Encoding iso-8859-1 einstellen und nicht utf-8.
Hallo Sirius
Was ich nicht verstehe ist, warum die Power Shell die Ausgabe falsch macht, obwohl das Dateiformat und die Magicline utf-8 sind.

Ich teste mal, den Ultra Edit in iso-8859-1 umzustellen.
Befürchte allerdings, dass ich dann auf Mac und iOS Probleme bekomme.

Am liebsten wäre mir schon, alles in utf-8 zu haben.
BlackJack

@didier: Verwende für Text `unicode()`-Objekte und kodiere die explizit für die Ausgabe.

Die PowerShell erwartet die Bytewerte in einer bestimmten Kodierung. Das ist halt so. Und wenn die in einer anderen Kodierung vom Programm kommen als die erwartete Kodierung dann werden falsche Zeichen ausgegeben.

Man kann nicht zuverlässig ermitteln was das Programm auf der anderen Seite erwartet, darum sollte man das flexibel halten und dem Anwender die Möglichkeit geben die Kodierung als Option anzugeben. Oder man verwendet eine Kodierung, zum Beispiel UTF-8 und legt damit dem Anwender auf sich entsprechend darum zu kümmern das seine Umgebung damit klar kommt.
didier
User
Beiträge: 11
Registriert: Freitag 18. April 2014, 12:40

Hallo BlackJack
Vielen Dank für die ausführliche Antwort. Aber da ich neu bin im Programmieren wäre ich sehr froh, wenn du mir ein kleines Codebeispiel angeben könntest, wie ich die Ausgabeformatierung bewerkstellige.

Danke.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Um dein Beispiel von vorhin aufzugreifen:

Code: Alles auswählen

# -*- coding: utf-8 -*-
print u"änderung. Öchterüchteri!".encode('iso-8859-1')
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
didier
User
Beiträge: 11
Registriert: Freitag 18. April 2014, 12:40

Hallo Leonidas
Supercool. Wieder was gelernt. Vielen Dank.
Antworten