読者です 読者をやめる 読者になる 読者になる

blechmusikの日記

キー・カスタマイズ・ソフトウェア "DvorakJ" の覚え書きをはじめとして様々なことを書いています。

utf-8 のテキストファイルを正しく読み込めないときの対処策

AutoHotkey

gnupackEmacs から cygstart 経由で ahk スクリプトを実行したら文字化けが生じた。どういうスクリプトかというと、utf-8 のテキストファイルを読み込んでメッセージボックスで出力するだけのものである。具体的にはつぎのようなものだ。

msgbox,% fileread("./readme.md")
return 


fileread(file)
{
	FileRead, OutputVar, %file%
	return OutputVar
}

まず疑ったのは、ファイルのエンコーディングが適切に取り扱われていないことである。これについては A_FileEncoding の値を見ればよい。以下のようにスクリプトに書いてみるといいだろう。

msgbox,%A_FileEncoding%
return 

分かったことは、現在のデフォルトエンコーディングが何ら設定されていないということだ。上記のスクリプト例ではA_FileEncodingが値を何も返してこないのである。
こうなると、デフォルトエンコーディングとして任意のコードページを設定する必要が出てくる。ここでは utf-8 のテキストファイルを読み込みたいので FileEncoding, CP65001 と記述しよう*1。こうして以下のようなスクリプトが出来上がった。

;; utf-8
FileEncoding, CP65001

;; msgbox,%A_FileEncoding%
msgbox,% fileread("./readme.md")
return 

fileread(file)
{
	FileRead, OutputVar, %file%
	return OutputVar
}

これで utf-8 のテキストファイルを正常に読み込めるようになった。