秀丸マクロのファイルは、文字エンコードとして「sjis / utf8(bom付) / unicode(bom付)」のいずれかが想定されています。
このマクロは、マクロ保存時に「マクロファイルとして適切な文字コードになっているか」をチェックするためのマクロです。
「マクロ登録」⇒「自動起動」⇒「保存直前と直後」として該当マクロファイル(HmOnSaveObserbedEncode.mac)を登録する。
すでに「保存直前と直後」に別のマクロがあるのであれば、中身をコピペするなりexecmacroするなりする。
/* * 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); } } } } }
自動マクロのまとめ方を参照のこと。
2017年現代では、大半のテキストファイルはUTF8で扱うことが多くなってきています。
一方で、UTF8のファイルにBOMを付けるか否かは、「拡張子やプロジェクトにより」揺れがあるのが実情です。
しかし、一旦、秀丸のデフォルトの文字コードをShiftJISではなく、UTF8にしておき、
上記マクロを拡張子等の判定を加えるなど、多少変更するだけで、
といった自動制御が簡単に出来ることでしょう。