流れとしてはjschardet
を使って文字コードを自動判別し、その文字コードからiconv
を使ってUTF-8に変換します。
まずはモジュールのインストール。
$ npm install jschardet --save
$ npm install iconv --save
文字コード判定をしてみます。
//test.jsに書きました
var jschardet = require('jschardet');
var notUtf8String = /* どこかから持ってきたUTF-8じゃなさそうな文字列 */;
var detectResult = jschardet.detect(notUtf8String);
console.log(detectResult);
実行してみます。
$ node test.js
{ encoding: 'ISO-8859-2', confidence: 0.7299161297501421 }
今回の例ではISO-8859-2
っぽいよ!というのが出ました。
続いて変換です。
iconv
を使えばこちらもシンプルにできます。
var Iconv = require('iconv').Iconv;
var iconv = new Iconv('ISO-8859-2', 'UTF-8//TRANSLIT//IGNORE');
var convertedString = iconv.convert(notUtf8String).toString();
合わせて書くと
var jschardet = require('jschardet');
var Iconv = require('iconv').Iconv;
var notUtf8String = /* どこかから持ってきたUTF-8じゃなさそうな文字列 */;
//文字コード判定
var detectResult = jschardet.detect(notUtf8String);
//判定した文字コードからUTF-8に変換
var iconv = new Iconv(detectResult.encoding,'UTF-8//TRANSLIT//IGNORE');
var convertedString = iconv.convert(notUtf8String).toString();