最近、Windows11のメモ帳で過去のバッチファイル(.bat)を編集しようと開くと日本語が文字化けする機会が増えたので調べた原因について備忘録的に投稿します。
メモ帳の自動検出
調べたWindows11でメモ帳のバージョンは[11.2605.34.0]でした。
メモ帳にはファイルを開く際に表示される[開く]画面に[自動検出]があり、既定値でも採用されます。
【推察】文字コードを決めるのは日本語の量
公式サイトを調べたのですが、特に言及されたドキュメントを見つける事が出来なかったので、あくまで推察です。
実験してみると[自動検出]で開く際に、文字コード(特に[ANSI(Shift JIS)]と[UTF-8(BOMなし)]を判定するのは日本語の量だというのが分かりました。
判定する閾値まで特定するのは出来ませんでしたが、次の実験をしました。
1. エンコードを[ANSI]として保存したテキストファイルを用意します。
2. メモ帳で開き、エンコードを確認してから適当な日本語を1行追加してエンコードに[ANSI]を指定して保存します。
3. 再度、メモ帳で開き日本語の行を増やして保存を繰り返します。
作業を続けると一定の行数で、開く際に[UTF-8]として判定されるようになります。
おそらく、全体の文字数から一定の割合で日本語を検出した場合に[UTF-8]になる感じです。
[BOM無しUTF-8]と[ANSI]で保存されたテキストを正確に判定するのは無理な話なので、何かのヒューリスティック的な判定ロジックが採用されているはずです。
なので、この誤判定を解消するには、確実に判定できる[BOM付きのUTF-8]にするしか方法がありません。
私は、バッチファイルの保存する際のエンコードを[BOM付きのUTF-8]に変更して、バッチファイルの先頭にエンコードを指定する方法に切り替えました。
@echo off
chcp 65001
まとめ
Windows11のメモ帳で過去のバッチファイル(.bat)を編集しようと開くと日本語が文字化けする機会が増えたので調べた原因について書きました。
メモ帳が開く際の[自動検出]を使う場合[BOM無しUTF-8]と[ANSI(Shift JIS)]を正確に判定する基準が、ファイル内に保存される日本語の量というのが推察できました。
日本語の量を調整するのは不可能なので、誤判定を改善するのは保存時のエンコードを[BOM付きのUTF-8]にするしか方法がありませんでした。
Windows11でメモ帳でバッチファイルを開く際に日本語が文字化けする人の参考になれば幸いです。
スポンサーリンク
最後までご覧いただき、ありがとうございます。

