Sublime und Unicode

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
Benutzeravatar
knekke
User
Beiträge: 100
Registriert: Freitag 29. Oktober 2004, 17:23
Wohnort: Schweden

Hi,

ich bin gerade dabei Sublime Text 2 zu testen, scheitere aber kläglich an irgendwelchen encoding einstellungen. Nun muss man dazu sagen, dass ich absolut kein Profi auf diesem Gebiet bin, und mich bislang immer nur irgendwie durchgefrickelt habe.
Das Problem ist, dass folgendes Skript:

Code: Alles auswählen

print "unicode über alles!".decode('utf-8')
astrein auf dem Windows Commandprompt (ja, ich wuerde auch lieber an einer Linux Maschine sitzen) ausgegeben wird, in der Sublime Console aber das hier ausspuckt:

Code: Alles auswählen

UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 8: ordinal not in range(128)
Ich habe mich in den letzten 2 Stunden fast zu Tode gegoogelt, und bin unter anderem auf das hier gestossen..

Hilft aber nix :/
Ich habe gesehen, dass einige hier im Forum Sublime benutzen.... please help me ObiWan!

gruss aus Schweden,
Thomas
BlackJack

@knekke: Du musst die Unicode-Zeichenkette vorher kodieren. Und zwar in der Kodierung welche das Programm erwartet was „hinter der Standardausgabe sitzt”. Diese Kodierung musst *Du* kennen. Weil man die nicht zuverlässig erraten kann.
Benutzeravatar
knekke
User
Beiträge: 100
Registriert: Freitag 29. Oktober 2004, 17:23
Wohnort: Schweden

Und in diesem konkreten Fall wuerde ich das wie genau machen?
lunar

@knekke

Code: Alles auswählen

print u"unicode über alles!".encode('utf-8')
Und lese ein bisschen...
Benutzeravatar
knekke
User
Beiträge: 100
Registriert: Freitag 29. Oktober 2004, 17:23
Wohnort: Schweden

Prima! Danke fuer die links!
Benutzeravatar
knekke
User
Beiträge: 100
Registriert: Freitag 29. Oktober 2004, 17:23
Wohnort: Schweden

Aber mal eine Frage an die Sublime user: Wie bekomme ich es denn hin, dass sich Sublime und Command Prompt gleich verhalten?
Das beispiel von lunar sieht jetzt prima aus in Sublime, aber unschön in cmd....
lunar

@knekke Gar nicht. Willkommen in der hässlichen Welt der Textkodierung.

Du kannst allenfalls versucht, die Kodierung der Ausgabeschnittstelle zu ermitteln. Dazu gibt es diverse Anlaufstationen, u.a. "sys.stdout.encoding", e.g.

Code: Alles auswählen

print u"unicode über alles!".encode(getattr(sys.stdout, 'encoding', None) or 'utf-8')
Edit: Natürlich besser so:

Code: Alles auswählen

print u"unicode über alles!".encode(getattr(sys.stdout, 'encoding', 'utf-8'))
Danke, BlackJack :)
BlackJack

@lunar: Warum `None` durch diesen ``or``-Hack ersetzen wenn man da auch gleich den Rückfallwert verwenden könnte?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@BlackJack, lunar: Weil falls die Ausgabe in eine Datei umgeleitet wird, None in stdout.encoding steht.
lunar

@Sirius3 In diesem Fall kann man sich dann das ganze Gefrickel mit "getattr()" sparen, oder?

@knekke Du siehst, am Umgang mit Kodierung haben sogar erfahrene Entwickler zu knabbern ;)
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@lunar: bestimmt haben nicht alle File-like-Klassen ein encoding Attribut,
aber solange niemand von Hand stdout verbiegt, kann man sich tatsächlich getattr sparen.

Ja, StringIO hat z.B. kein encoding.
Benutzeravatar
knekke
User
Beiträge: 100
Registriert: Freitag 29. Oktober 2004, 17:23
Wohnort: Schweden

Vielen Dank fuer die Antworten!
Hier gibt es nun genug Ansätze, um mir jedesmal eine funktionierende Lösung zurechtzufrickeln :)
Das interesse ist leider nicht gross genug um mich allzutief in die Materie vorzuwagen (die Links habe ich allerdings ueberflogen)...


gruss aus Schweden,
Thomas
Benutzeravatar
knekke
User
Beiträge: 100
Registriert: Freitag 29. Oktober 2004, 17:23
Wohnort: Schweden

...und sorry fuer den spam, aber ich wollte schnell mal die 100 Beiträge vollmachen :mrgreen:
Antworten