最終更新日 2024-06-21

外部ファイルの文字コードの自動判定(秀丸アルゴ)

秀丸の設定に則った外部ファイルのエンコード判定 (秀丸エディタ 8.90以降)

秀丸が対象の外部テキストを「これから」初めて「あなたの秀丸エディタ」で読み込んだと仮定すると、
秀丸は、対象のファイルをどのエンコードと判断するだろうか、その結果を取得する関数です。

ポイントは「初めて」と「あなたの秀丸エディタ」の設定で読み込んだ場合、ということになります。
どのPCでも同じとなる汎用的な結果が返ってくる機能ではありません。

設定は、秀丸より「その他」⇒「動作環境」⇒「ファイル」⇒「エンコード1」で主に設定されています。
この優先順位にしたがって判定され、また、チェックが付いていないエンコード値は、この関数では「取り扱わないもの」とされます。
PICTURE

このように、あくまでも]「あなたの秀丸エディタの設定」と一致したエンコード情報が欲しい場合に、このメソッドを利用します。

秀丸でファイルのエンコードを取得する(秀丸に設定されている内容に従う)

hm.File.GetEncoding( String filepath )

この返り値のオブジェクトには「codepage」と「hm_encode」と「name」がプロパティとして存在します。
hm_encodeには、秀丸マクロの「encode」の解説書 の「encode」の項目に対応する値が格納されています(※)。
codepageには、秀丸の独自のencode値を、Windows上での「コードページ」の番号へと置き換えたものです。
name には、Pythonのファイル読み込み系や文字コードで良く利用される「文字コード名(例: utf-8 や cp032)が得られます。

対象のパスにファイルを置いたり、ファイル名を変更したり、ファイルのエンコードを変更するなどして、
いろいろと挙動を確認してみましょう。

特に、「その他」⇒「動作環境」⇒「ファイル」⇒「エンコード1」 で判定対象となっていないエンコードの場合に、
強引にどれかに秀丸が当てはめようとしてしまうため、判定ミスが発生します。

よって、この関数が使えるには、「対象のディレクトリには、自分自身が使っている秀丸なら一発でエンコードが正しく判断可能」でありという
「そういったファイル群に対してのみ自動で振り分けて処理をする」といった限られたシーンで利用することとなるでしょう。

秀丸の設定に則って外部ファイルを読み込む (秀丸エディタ 8.90以降)

上述では、秀丸の機能を使って外部ファイルのエンコードを判定しましました。
該当のソースでは、pythonの関数を利用して、テキストを読み込んでいますが、
秀丸から提供されている関数を利用したメソッドも提供しています。

このように、あくまでも「あなたの秀丸エディタの設定」と一致したテキスト読み込み結果が欲しい場合に、このメソッドを利用します。

秀丸でファイルのエンコードを判断し(この時、秀丸に設定されている内容に依存する)、
その判断結果に基づいて、ファイルのテキスト内容を取得する。

マクロ中でもマクロ中以外でも、常時取得することが出来ます。

hm.File.Open( filepath: str, [hm_encode: int] )