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
関数を使用しています。
concatStream関数とは?
ストリームの全てのデータを纏めて取得するにはconcat-streamモジュールのconcatStream関数を使用します。 ストリームとは?ストリームの使い方ストリームとは
pump関数とは?
readable.pipe関数を使用してストリームを接続した場合には単に接続が行われるだけでエラー処理は自分で行わなければなりません。 ストリームとは?ストリームの使い方ストリームとは
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-8
でtextfile2.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.js
、textfile.txt
、textfile2.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 }
関連

スポンサーリンク