PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Unicode UTF-8 geht nicht in Python


Gast
2008-06-28, 02:05:04
Ich habe hier ein Problem mit Python unter Windows,
und zwar gibt er die Unicode Charaktere nicht richtig aus:

Hier ist mein kleines UTF-8 Test Programm:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
print "Zähler"


Normalerweise müßte er jetzt das ä bei der Ausgabe im Wort Zähler richtig schreiben, aber in der Eingabeaufforderung sehe ich nur

Zähler
Drücken Sie eine beliebige Taste . . .


Mein Editor kann UTF-8 und speichert die Datei auch enstprechend ab, daran liegt es nicht.
Auch habe ich das codng Verfahren wie man oben sieht im Quellcode festgelegt, aber die Ausgabe ist trotzdem falsch.

Das Programm habe ich unter Windows getestet, laßt euch also nicht durch die 1. Zeile dir für Unix gedacht ist beirren.
Kann die Eingabeaufforderung von Windows XP eventuell kein Unicode?

RattuS
2008-06-28, 11:15:41
Kann die Eingabeaufforderung von Windows XP eventuell kein Unicode?
Doch kann sie. Übersetzt der Compiler denn das UTF-8 überhaupt richtig?

Gast
2008-06-28, 11:28:29
Doch kann sie. Übersetzt der Compiler denn das UTF-8 überhaupt richtig?

Das ist ne Scriptsprache, die braucht in erster Linie keinen Compiler sondern ein Programm das die Scirptanweisungen umsetzt.

rotalever
2008-06-28, 11:45:10
Ich weiß nicht, ob das gut ist, aber versuch mal ein u vor den String zu machen. Also z.B.

x = u"Zähler"
print x

Interactive Shell:

>>> u'ł'
u'\u0142'
>>> 'ł'
'\xc5\x82'
>>> u'ß'
u'\xdf'
>>> 'ß'
'\xc3\x9f'

Für mich sieht das so aus, als würde ein normaler String eine feste Bytelänge von 2Byte haben, also Unicode16 und wenn man ein u davor macht ist es variabel und deshalb vermutlich UTF-8.

Sephiroth
2008-06-28, 13:33:22
Doch kann sie.
Jein. Standardmäßig wird die Codepage 850 (DOSLatin1) (http://www.miakinen.net/vrac/codeset?set=cp850) verwendet.

Via Registry könnte man es unter HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage z.b. auf CP1252 ändern. Während der Sitzung geht es mit dem Befehl chcp. UTF-8 (CP65001) hat man dann aber trotzdem nicht.

Gast, wandele deine Ausgabe vorher in CP850 um, dann bist du in den meisten Fällen auf der sicheren Seite. Alternativ besorg dir vorher die Codepage und verwende die.

p.s.
Von "chcp 65001" rate ich ab, erst recht es via registry zu setzen und neuzustarten.

RattuS
2008-06-28, 17:42:34
Das ist ne Scriptsprache, die braucht in erster Linie keinen Compiler sondern ein Programm das die Scirptanweisungen umsetzt.
Dann nenn es meinetwegen Interpreter.

Gast
2008-06-29, 20:06:38
Ich weiß nicht, ob das gut ist, aber versuch mal ein u vor den String zu machen.


THX, das hat funktioniert.

Ich dachte Python nutzt automatisch Unicode Strings.

Gast
2008-06-29, 20:07:18
Dann nenn es meinetwegen Interpreter.

Ja, das ist die richtige Bezeichnung, so muß es sein. :top:

Mad-Marty
2008-07-12, 22:43:38
THX, das hat funktioniert.

Ich dachte Python nutzt automatisch Unicode Strings.


in version 3 ja ... ich bezweifel das du die hast

Mad-Marty
2008-07-12, 22:45:24
Ich weiß nicht, ob das gut ist, aber versuch mal ein u vor den String zu machen. Also z.B.

x = u"Zähler"
print x

Interactive Shell:

>>> u'ł'
u'\u0142'
>>> 'ł'
'\xc5\x82'
>>> u'ß'
u'\xdf'
>>> 'ß'
'\xc3\x9f'

Für mich sieht das so aus, als würde ein normaler String eine feste Bytelänge von 2Byte haben, also Unicode16 und wenn man ein u davor macht ist es variabel und deshalb vermutlich UTF-8.


Ein normaler string ist ascii und hat 1 byte per char.