情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Node.jsでデータの文字コードを判定する

2016/08/10

データの文字コードを判定するにはjschardetモジュールのjschardet.detect関数を使用します。

var jschardet = require('jschardet');

var enc = jschardet.detect(buf);

第1引数にデータが格納されているバッファを指定します。

返り値としてデータの文字コードを判定した結果がオブジェクトとして得られます。

このオブジェクトは下のようなプロパティを有します。

  • encoding・・・文字コードの名称です。
  • confidence・・・信頼度です。信頼度は0から1までの値であり、値が大きいほど信頼度が高いことを示します。

サンプルコード1

3つ目のコマンドライン引数として与えられたテキストファイルのデータをストリームを使用して読み込み、文字コードを判定した結果を標準出力に出力します。

なお、ストリームの処理のためにconcatStream関数とpump関数を使用しています。

jschardet-detect.js

var fs = require('fs');
var concatStream = require('concat-stream');
var jschardet = require('jschardet');
var pump = require('pump');

if (process.argv.length < 3) {
    console.error('lack argument.');
    process.exit(1);
}

try {
    var rs = fs.createReadStream(process.argv[2]);
    var writable = concatStream(function (data) {
        console.log(jschardet.detect(data));
    });
    pump(rs, writable, function (err) {
        if (err) {
            console.error(err);
            process.exit(1);
        }
    });
}
catch (err) {
    console.error(err);
    process.exit(1);
}

使用パッケージ

  • concat-stream
    npm install concat-streamでインストールします。
  • JsChardet
    npm install jschardetでインストールします。
  • pump
    npm install pumpでインストールします。

実行結果

現在のフォルダにはtextfile.txt及びtextfile2.txtという名称のテキストファイルが存在しています。

textfile.txtの文字コードはUTF-8textfile2.txtの文字コードはSHIFT_JISです。

C:\work\node>type textfile.txt
UTF-8のテキストファイルです。
C:\work\node>type textfile2.txt
SHIFT_JIS�̃e�L�X�g�t�@�C���ł��B

上のコードでjschardet-detect.jstextfile.txttextfile2.txtの文字コードを判定してみると下のような結果になりました。

正しく文字コードが判定されていることが分かります。

C:\work\node>node jschardet-detect.js jschardet-detect.js
{ encoding: 'ascii', confidence: 1 }

C:\work\node>node jschardet-detect.js textfile.txt
{ encoding: 'UTF-8', confidence: 1 }

C:\work\node>node jschardet-detect.js textfile2.txt
{ encoding: 'SHIFT_JIS', confidence: 0.99 }

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Node.js