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.
Python schreibt asiatische Zeichen
- 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 )
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
assert encoding_kapiert
Hier der ganze Code, ich probiere Hooks aus.
Das ganze produziert asiatische Zeichen, in log.txt steht dann:
Habe es versucht mit:
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.
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()
整瑳琠獥⁴摦摤晦晦摦摦摦摦摦摦摦映晤摦
Habe es versucht mit:
Code: Alles auswählen
key = str(chr(event.Ascii))
key2 = key.decode("iso-8859-1")
- 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...
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
assert encoding_kapiert
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.
Wenn ich das dann in die Datei schreibe sind es asiatische Zeichen.
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.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?
Woran liegt das aber?
@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.
Edit: Dann müsste das da oben 'ettst se tdfdd dffffdfdfdfdfdfdfdff fddf' heissen.
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 hat geschrieben: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.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?
Woran liegt das aber?
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.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.
@all
Danke, weiß jetzt worauf ich achten muss.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ich vermute eher dass Notepad da das UTF-16 Byte-Order-Mark findet und entscheidet dass das UTF-16 ist.Pekh hat geschrieben:Wenn ich mich richtig erinnere, konnte man in Notepad das Encoding nicht manuell einstellen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice