最終更新日 2024-09-25

秀丸エディタ・マクロ保存時の文字コード&BOMの自動チェック

概要

秀丸マクロのファイルは、文字エンコードとして「sjis / utf8(bom付) / unicode(bom付)」のいずれかが想定されています。
このマクロは、マクロ保存時に「マクロファイルとして適切な文字コードになっているか」をチェックするためのマクロです。

ダウンロード

動作環境

使い方

「マクロ登録」⇒「自動起動」⇒「保存直前と直後」として該当マクロファイル(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にしておき、
上記マクロを拡張子等の判定を加えるなど、多少変更するだけで、

といった自動制御が簡単に出来ることでしょう。

ライセンス

パブリックドメインです。

ソースの場所

Githubにソースがあります。