0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

jschardetを使って、ファイルの文字コードを判断する

Posted at

環境

node.js v16.14
Ubuntu 20.4

はじめに

Node.jsでテキストファイルを読み込む場合、読み込み元ファイルの文字コードが、UTF-8以外のとき、全角日本語が文字化けすることになります。テキストファイルを読み込んだ後、ファイルの文字コードを判断できないだろうかと思って、調べていたところ、jschardetというライブラリを見つけたため、試してみることにした。

解説

用意したテキストファイルは以下の4種類です。4種類のファイルの読み込みは、関数の引数で判断させています。

  • UTF-8
  • UTF-16
  • UTF-16BE
  • S-JIS

ファイルの文字コードが、UTF-8以外であった場合、エラーと判断してコンソールログを表示します。

jschardet.detectに読み込んだファイルの内容を文字列で渡すと、encodingconfidenceの2つのキーを持つ連想配列を返します。encodeingはライブラリが判断した文字列がセットされ、confidenceにはライブラリーが判断した文字コードの正確さ加減がセットされます。confidence1を返せば、結果は100%正しいと判断できますが、1以下を返せば、精度はどこまで信用できるか・・・という話になります。

ライブラリのインストール

jschardetは、npmでインストールします。

$npm install jschardet

コード

node.js
function check_file(flg) {

    var fs = require('fs'), fd;
    var jschardet = require('jschardet');

    var filnm = ["sample_utf8", "sample_utf16", "sample_utf16be", "sample_sjis"];
    var file = __dirname + "/端末ID/" + filnm[flg] + ".txt";

    var text = fs.readFileSync(file);

    // 文字コードがUTF-8(ascii)以外であればエラーにする
    if (jschardet.detect(text).encoding != "ascii") {

        let msg1;
        msg1 = "ファイルの文字コードがUTF8でないため開くことができません。" + "\n";
        msg1 += "ファイルの文字コードは、" + jschardet.detect(text).encoding + "です。";
        console.log(msg1);

        let msg2;
        msg2 = jschardet.detect(text);
        console.log(msg2);
        return;
    }

    console.log("OK! ファイルは、" + jschardet.detect(text).encoding + "です。");
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?