Seite 1 von 1

Python schreibt asiatische Zeichen

Verfasst: Montag 13. Dezember 2010, 15:34
von PyByte
Folgender Befehl:

file.write(chr(event.Ascii))

produziert (in Python 2.7) meistens asiatischen Schriftzeichen in der Datei in die geschrieben wird.
Wie kann ich die Schriftcodierung einstellen? encode() funktioniert irgendwie nicht.

Re: Python schreibt asiatische Zeichen

Verfasst: Montag 13. Dezember 2010, 15:36
von Hyperion
"Meistens" klingt schon mal komisch underterministisch ;-)

Was ist den event für ein Objekt?

Woher weißt Du, dass da ein asiatisches Zeichen in der Datei steht?

Bist Du mit dem Konzept von Unicode vs. Bytestrings vertraut? (wenn nein, s. meine Sig :-) )

Re: Python schreibt asiatische Zeichen

Verfasst: Montag 13. Dezember 2010, 16:13
von PyByte
Hier der ganze Code, ich probiere Hooks aus.

Code: Alles auswählen

import pythoncom
import pyHook

def OnKeyboardEvent(event):
    file = open("log.txt", "a")
    file.write(chr(event.Ascii))
    file.close()
    return True

hm = pyHook.HookManager()
hm.KeyDown = OnKeyboardEvent
hm.HookKeyboard()
pythoncom.PumpMessages()

Das ganze produziert asiatische Zeichen, in log.txt steht dann:
整瑳琠獥⁴摦摤⁤晦晦摦摦摦摦摦摦摦映晤摦

Habe es versucht mit:

Code: Alles auswählen

    
key = str(chr(event.Ascii))
key2 = key.decode("iso-8859-1")
Geht nicht, schreibt immer noch asiatische Zeichen. Und ja meistens, weil ab und zu ging es dann doch irgendwie obwohl ich nichts verändert hatte.

Re: Python schreibt asiatische Zeichen

Verfasst: Montag 13. Dezember 2010, 16:16
von Hyperion
Was liefert denn "event.Ascii"? Wieso schreibst Du gleich in eine Datei? Gib doch lieber mal per print den typen und die repr-Darstellung aus.

Und ich erinnere noch mal an meine letzte Frage oben! Nach dem Code, den Du da unten gezeigt hast, versuchst Du eher Trial and Error mäßig zum Ziel zu kommen...

Re: Python schreibt asiatische Zeichen

Verfasst: Montag 13. Dezember 2010, 16:21
von PyByte
event.Ascii liefert einen Ascii Integer, in der Konsole ausgegeben sind es Zahlen wie 116, 103 usw. und mit chr() umgewandelt sind es latainische Buchstaben.
Wenn ich das dann in die Datei schreibe sind es asiatische Zeichen.

Re: Python schreibt asiatische Zeichen

Verfasst: Montag 13. Dezember 2010, 16:25
von Pekh
Das wäre sehr seltsam, weil ASCII keine asiatischen Zeichen enthält. Wie öffnest du denn die Logdatei, um dir den Inhalt anzeigen zu lassen? Kann es sein, daß der Editor ein falsches Encoding annimmt?

Re: Python schreibt asiatische Zeichen

Verfasst: Montag 13. Dezember 2010, 16:32
von PyByte
Pekh hat geschrieben:Das wäre sehr seltsam, weil ASCII keine asiatischen Zeichen enthält. Wie öffnest du denn die Logdatei, um dir den Inhalt anzeigen zu lassen? Kann es sein, daß der Editor ein falsches Encoding annimmt?
Das muss es sein, ich öffnete es immer mit dem Standard Editor in Windows. Habe es aber mal mit OpenOffice geöffnet und konnte Ascii Filter einstellen und dann wird es auch richtig angezeigt.

Woran liegt das aber?

Re: Python schreibt asiatische Zeichen

Verfasst: Montag 13. Dezember 2010, 16:45
von BlackJack
@PyByte: Schau Dir die Datei mal mit einem Hexeditor an. Ich würde ja mal vermuten da stehen am Anfang irgendwelche Werte die den Editor denken lassen dass ist zum Beispiel UTF-16 kodiert oder so.

Edit: Dann müsste das da oben 'ettst se tdfdd dffffdfdfdfdfdfdfdff fddf' heissen.

Re: Python schreibt asiatische Zeichen

Verfasst: Montag 13. Dezember 2010, 16:46
von Pekh
PyByte hat geschrieben:
Pekh hat geschrieben:Das wäre sehr seltsam, weil ASCII keine asiatischen Zeichen enthält. Wie öffnest du denn die Logdatei, um dir den Inhalt anzeigen zu lassen? Kann es sein, daß der Editor ein falsches Encoding annimmt?
Das muss es sein, ich öffnete es immer mit dem Standard Editor in Windows. Habe es aber mal mit OpenOffice geöffnet und konnte Ascii Filter einstellen und dann wird es auch richtig angezeigt.

Woran liegt das aber?
Wenn ich mich richtig erinnere, konnte man in Notepad das Encoding nicht manuell einstellen. Folglich verwendet er entweder eine im System vergrabene Standardeinstellung (asiatisches Windows, Eingabe-Zeichensatz o.ä.) oder er versucht, das Encoding anhand irgendwelcher Merkmale in der Datei zu raten.

Re: Python schreibt asiatische Zeichen

Verfasst: Montag 13. Dezember 2010, 17:20
von PyByte
BlackJack hat geschrieben:@PyByte: Schau Dir die Datei mal mit einem Hexeditor an. Ich würde ja mal vermuten da stehen am Anfang irgendwelche Werte die den Editor denken lassen dass ist zum Beispiel UTF-16 kodiert oder so.

Edit: Dann müsste das da oben 'ettst se tdfdd dffffdfdfdfdfdfdfdff fddf' heissen.
Ja stimmt, es sind zwei Zeichen vor dem was ich geschrieben habe. In Hex "FF" und "FE". Entfernt man die wird es wieder richtig angezeigt.

@all
Danke, weiß jetzt worauf ich achten muss.

Re: Python schreibt asiatische Zeichen

Verfasst: Montag 13. Dezember 2010, 20:46
von Leonidas
Pekh hat geschrieben:Wenn ich mich richtig erinnere, konnte man in Notepad das Encoding nicht manuell einstellen.
Ich vermute eher dass Notepad da das UTF-16 Byte-Order-Mark findet und entscheidet dass das UTF-16 ist.