最終更新日 2025-07-22
秀丸エディタ・マクロ保存時の文字コード&BOMの自動チェック
概要
秀丸マクロのファイルは、文字エンコードとして「sjis / utf8(bom付) / unicode(bom付)」のいずれかが想定されています。
このマクロは、マクロ保存時に「マクロファイルとして適切な文字コードになっているか」をチェックするためのマクロです。
ダウンロード
更新日 2017/12/13
動作環境
- 秀丸 ver8.50以上。
使い方
「マクロ登録」⇒「自動起動」⇒「保存直前と直後」として該当マクロファイル(HmOnSaveObserbedEncode.mac)を登録する。
すでに「保存直前と直後」に別のマクロがあるのであれば、中身をコピペするなりexecmacroするなりする。

HmOnSaveObserbedEncodeマクロ内容
/*
* HmOnSaveObserbedEncode v1.0.0.1
* 秀丸 v8.50以上
* パブリックドメイン
*/
OnFileSave_ObservedEncodeAsHidemaruMacro:
if (filetype == ".mac") {
// セーブ時?
// event==3 保存直前と直後
if (event == 3) {
// 保存直後?
// event==3の時のgeteventparam(0)の返り値は、 0 保存直前 1 保存直後
##is_after_save = geteventparam(0);
if (##is_after_save == 1) {
##encode_num = encode & 0x3F;
// utf8? or utf16?
if (##encode_num==2 || ##encode_num==6) {
if (!bom) {
setencode encode, 1, 1;
save;
##OUT = loaddll("HmOutputPane.dll");
#ret = dllfunc(##OUT, "Output",hidemaruhandle(0),"秀丸マクロと判断した場合、BOMが必要です。\r\n ⇒ BOMを付与しました。\r\n");
freedll(##OUT);
}
}
// sjis?
else if (##encode_num==1) {
; // なし
}
// その他。
// ワザとでもない限り、日本人がマクロ保存時にここに突入してはこないだろう…
// 別言語圏の人が、その圏で主要なマルチバイト等で保存した、など?
else {
// 多バイト文字っぽいのが含まれているか?
// 文字数とバイト数が異なれば…といった趣旨
if (charcount(0x00000000|0x00000000|0x00000000|0x00000000|0x00200000) !=
charcount(0x00000001|0x00000000|0x00000100|0x00000000|0x00200000)) {
##OUT = loaddll("HmOutputPane.dll");
#ret = dllfunc(##OUT, "Output",hidemaruhandle(0),
"秀丸マクロと判断した場合、不正な文字コードです。\r\n ⇒ sjis / utf8(bom) / unicode(bom) のいずれかで保存してください。\r\n"
);
freedll(##OUT);
}
}
}
}
}
関連項目①
自動マクロのまとめ方を参照のこと。
関連項目② ~秀丸のデフォルトの文字コードをUTF8に~
2017年現代では、大半のテキストファイルはUTF8で扱うことが多くなってきています。
一方で、UTF8のファイルにBOMを付けるか否かは、「拡張子やプロジェクトにより」揺れがあるのが実情です。
しかし、一旦、秀丸のデフォルトの文字コードをShiftJISではなく、UTF8にしておき、
上記マクロを拡張子等の判定を加えるなど、多少変更するだけで、
- 「UTF8でBOMを付ける必要があるモノ」には付け、
- 「UTF8でBOMを付ける必要がないモノ」には外す、
といった自動制御が簡単に出来ることでしょう。

