SciTE用 日本語文字コード判別ツール


SciTE の新しめの版では、設定ファイルに
command.discover.properties=some-tool "$(FilePath)"
を設定することでファイルの文字コードを some-tool に 移譲することができます。

そのためのツールを書きましたので公開します。

判定できるのは shift-jis か utf-8 かの二種類です。 (euc-jp は SciTE が対応していない)

ダウンロード

ソースをビルドするには、gcc-4.6 以降(4.5以下は不可) か、 Visual Studio 2010 以降 (またはそれ相当の CL) が必要です。

バグやご要望があれば omawarisan.bokudesu ここにあっとをいれる live.jp まで。

Lua 5.2 から(?)使えるようになったらしい bit32 というモジュールがあれば、 わざわざ C で書かなくても OnOpen イベントを Lua でフックして スクリプトだけでいけそうな気がします…。 ダメでした。 というのは、OnOpen で editor.CodePage を変更しても反映されませんでした。 (これは Windows 版 SciTE 特有の現象です。バグ?)

更新箇所 (120214 → 120308)

やってること

まずファイルを読んで、マルチバイト文字だと判定されたバイトをヒストグラムにします。 そのときに解釈エラーが起きないかどうか同時にチェックします。

ai = (バイト値 i がマルチバイト文字だと判定された回数)

もしshift-jisと仮定したときだけ / utf-8と仮定したときだけ、のいずれかのときのみに、 読み込みエラーがなくなるときは、文字コードをそれだと判定します。

どちらでもいけるとき / どちらでもエラーが起きるときは、 上で求めた ai を普通のベクトルだと思って規格化します:

âi = ai / |a|

同様の方法で、shift-jis だとわかっているテキストからベクトル ŝi を、 utf-8 だとわかっているテキストからベクトル ûi を事前に計算しておきます。

内積 (â,ŝ) と (â,û) を比較して、大きいほうを選択します。

以上


戻る

inserted by FC2 system