C# の日本語文字エンコーディング推定クラス

概要

このページでは、C# 言語で実装した日本語の文字エンコーディングを推定するクラスを公開しています。 .NET Framework での動作に加え、 .NET Compact Framework 環境でも動作します。 1 ファイルに収まっているため他アプリケーションへの追加なども気軽に行えるのではないかと思います。

機能

指定したパスのファイルを開いてエンコーディングを推定するか、 バイト列を直接プログラム上で与えてエンコーディングを推定します。 推定されるエンコーディングの候補は次のものです。 なお、ASCII 文字しか無いバイト列を判定するとシステム標準のエンコーディングを返します。

簡単な使用例

名前空間 Sgry に EncodingAnalyzer という名前のクラスを定義しています。 これが唯一公開している静的メソッド Analyze に解析対象のファイルパス (あるいは対象のバイト列か、対象のストリーム) を渡すと、推定されたエンコーディングが返ります。 なお、推定結果として null は返りません。 たとえば次のように使います。

//using System.IO;
//using Sgry;

// カレントディレクトリにある全ファイルのエンコーディングを解析、一覧
string[] currentDirFiles = Directory.GetFiles( Environment.CurrentDirectory );
foreach( string filePath in currentDirFiles )
{
    try
    {
        // このファイルのエンコーディングを解析
        Encoding encoding = EncodingAnalyzer.Analyze( filePath );
        Console.WriteLine( "{0}: ({1})",
                Path.GetFileName(filePath),
                encoding.WebName
            );
    }
    catch( IOException )
    {
        // このファイルは開けなかった
        Console.WriteLine( "{0}: (couldn't open)", Path.GetFileName(filePath) );
    }
}

ライセンス

このプログラムソースは zlib ライセンスの下で公開します。 同ライセンスの下では、 商用・非商用を問わず自由に使用、コピー、改変、結合、掲載などを行う事が許可されます。 zlib ライセンスの内容については拙作のテキストエディタエンジン Azuki 用に書いたページをご参照ください。

Azuki 用の zlib ライセンスの説明ページへ移動

ダウンロード

現在の最新版は 2.0.0 です。 このバージョンは解析処理をフルスクラッチで書き直し、処理を高速化しました。 また BOM が無い UTF-16 のテキストデータも推定可能になりました。

現在の安定版は 1.3.0 です。 このバージョンでは BOM が無い UTF-16 のテキストデータは正常に推定できません。

更新履歴

[v2.0.0] 2009-10-17
- 独自ロジックで一から再実装
- 処理を高速化
- BOM 無しの UTF-16 でも解析可能に

[v1.3.0] 2009-03-29
- ライセンスを zlib license に変更
- ドキュメントに大幅加筆
- 単体テストを付属
- 特定条件を満たすバイナリパターンを解析中に例外が発生する問題を修正
- .NET Compact Framework 2.0 でも動作確認を行うように

[v1.2.2] 2008-11-01
- 空のファイルを解析すると例外が発生する問題を修正

[v1.2.1] 2007-01-25
- 長いファイルで前半に ASCII 文字しか無いと UTF-8 でないと誤判定する問題を修正

[v1.2.0] 2007-01-01
- 著作権表示を更新

[v1.2.0] 2006-10-01
- BOM の有無を取得できるように

[v1.1.2] 2006-09-08
- ASCII 文字しか無い場合、UTF-8 ではなく System.Default とするように

[v1.1.1] 2006-09-08
- ファイルパスを指定してエンコーディングを解析すると対象ファイルを開いたままにする問題を修正

[v1.1.0] 2006-09-05
- JIS かどうかを判定中に無限ループになりうる問題を修正
- UTF-8 の判定を BOM に頼らずに行うように
- 全体的に精度と速度を向上

[v1.0.0] 2006-05-17
- 曽田さんの ttPage の
  エンコーディング判定処理と同じ内容で C# プログラムとして作成。