2010/12/21

テキストファイルの文字コードを判別して読み込む

不特定多数のテキストファイルから検索を行ったりするスクリプトを作る場合、文字コードを正しく認識して読み込む必要があります。
NILScriptのFileオブジェクトに用意されているload()メソッドでは、文字コードを指定するための第1引数を省略した場合、エラーにならずに読み込める文字コードを自動選択して読み込んでくれますが、誤った文字コードでも全てのバイトをデコードできる場合などは、誤認識してしまうことがあります。
より正確な文字コード認識を行いたい場合、「Charset」というユニットを使います。
以下のように記述すれば、Charsetユニットによる高精度な文字コード判別を行ってテキストファイルを読み込むことが出来ます。
var text=require('Charset').Detector.load(someFile);

また、以下のようにすることで、検出した文字コード名を得ることも可能です。
var charset=require('Charset').Detector.detect(someFile);

他にも、ストリームオブジェクトから読み込みを行いながら文字コードを判別する機能なども用意されています。

Charsetユニットでは、IEなどで使用されているmlang.dllの機能を利用して文字コードの判別を行っています。「です」「である」などの頻出文字列の出現なども手がかりにしているらしく、通常のload()で使用している方法より正確に判別してくれます。

なお、読み込まれた文字列はUnicode文字列として保持されるので、海外製の処理系にありがちな駄目文字問題に悩まされることはありません。

0 件のコメント:

コメントを投稿