autohotkey Bug

Japanische Zeichenkodierungsfehler beim Lesen von Dateien mit AutoHotKey verhindern

So handhaben Sie Fälle, in denen japanische, Kanji-Zeichen und andere nicht-alphabetische Zeichen beim Lesen von Dateien mit AutoHotKey, Windows-PC-Automatisierungssoftware, unleserlich werden.

Shou Arisaka
2 Min. Lesezeit
2. Nov. 2025

So handhaben Sie Fälle, in denen japanische, Kanji-Zeichen und andere nicht-alphabetische Zeichen beim Lesen von Dateien mit AutoHotKey, Windows-PC-Automatisierungssoftware, unleserlich werden.

Image

Ich habe mehrere Artikel über die Handhabung von Zeichenkodierungsproblemen in AutoHotKey geschrieben, aber diesmal ist es etwas fortgeschrittener. Mit meiner Programmierer-Intuition konnte ich es sofort lösen, aber wenn Sie nur AutoHotKey kennen, könnte die Lösung schwierig sein. Aber keine Sorge. Dieser Artikel wird es lösen.

Ich hatte eine Funktion in AutoHotKey implementiert, um Bash-Befehle auszuführen und die Standardausgabe wie folgt zurückzugeben:

 getexec(command){

   ; Run, bash.exe -c '%command% > /mnt/c/pg/autohotkey/getexec.tmp.txt', ,hide
   RunWait, bash.exe -c '%command% > /mnt/c/pg/autohotkey/getexec.tmp.txt', ,hide

   ; sleep 200
   sleep 50

   FileRead, OutputVar, C:/pg/autohotkey/getexec.tmp.txt

   return OutputVar

 }

Normalerweise war kein Japanisch gemischt wie hier:

:*:isodate ::
  sendText( RegExReplace( getexec("date +%FT%T%Z") , "\s*(\n|\r\n)$", A_Space) )
return

Aber ich brauchte Ausgaben mit Japanisch, also testete ich es:

:*:hoge ::
  sendText( RegExReplace( getexec("bash -c date") , "\s*(\n|\r\n)$", A_Space) )  
return

Image

Es war perfekt unleserlich.

Nun zur sofortigen Lösung.

Es gibt zwei Wege:

  • Platzieren Sie FileEncoding , UTF-8
  • Verwenden Sie FileOpen anstelle von FileRead

In jedem Fall überprüfen Sie zuerst, dass die Zeichenkodierung und BOM der AutoHotKey-Datei richtig eingestellt sind. Dies ist allgemeines Wissen unter AutoHotKey-Benutzern.

Image

Sofort gelöst mit folgendem Befehl:

nkf --overwrite --oc=UTF-8-BOM dev.ahk

Erste Methode:

AutoHotKey ermöglicht das Einstellen einer Standard-Dateikodierung, also definieren Sie diese Variable.

FileEncoding - Syntax & Usage | AutoHotkey

Also wird es:

 getexec(command){

   ; Run, bash.exe -c '%command% > /mnt/c/pg/autohotkey/getexec.tmp.txt', ,hide
   RunWait, bash.exe -c '%command% > /mnt/c/pg/autohotkey/getexec.tmp.txt', ,hide

   ; sleep 200
   sleep 50

   FileEncoding , UTF-8
   FileRead, OutputVar, C:/pg/autohotkey/getexec.tmp.txt

   return OutputVar

 }

Dies funktioniert, aber beachten Sie: Dies ist bedeutungslos, wenn es nicht innerhalb einer Funktion definiert wird, also definieren Sie es nicht global. Ich konnte es global definieren. Es muss jedoch vor der Funktionsdefinition definiert werden, also seien Sie vorsichtig. Platzieren Sie es um die erste Zeile herum.

Zweite Methode:

Verwendung von FileOpen.

Force a file to be read as UTF-8? - AutoHotkey Community FileOpen() - Syntax & Usage | AutoHotkey

Es wird:

getexec(command){

  RunWait, bash.exe -c '%command% > /mnt/c/pg/autohotkey/getexec.tmp.txt', ,hide

  ; sleep 200
  sleep 50

  ; FileRead, OutputVar, C:/pg/autohotkey/getexec.tmp.txt
  file := FileOpen("C:/pg/autohotkey/getexec.tmp.txt", "r", "UTF-8")
  content := file.Read()

  return content

}

Beide Methoden funktionieren, aber FileEncoding, das später als Abkürzung entdeckt wurde, scheint bequemer zu verwenden zu sein.

Diesen Artikel teilen

Shou Arisaka 2. Nov. 2025

🔗 Links kopieren