Python schreibt asiatische Zeichen

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
PyByte
User
Beiträge: 25
Registriert: Samstag 16. Oktober 2010, 03:32

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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

"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 :-) )
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
PyByte
User
Beiträge: 25
Registriert: Samstag 16. Oktober 2010, 03:32

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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
PyByte
User
Beiträge: 25
Registriert: Samstag 16. Oktober 2010, 03:32

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.
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

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?
PyByte
User
Beiträge: 25
Registriert: Samstag 16. Oktober 2010, 03:32

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?
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.
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

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.
PyByte
User
Beiträge: 25
Registriert: Samstag 16. Oktober 2010, 03:32

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten