1. ホーム
  2. node.js

[解決済み] Node.jsがサポートしているエンコーディングの一覧です。

2022-04-22 12:07:01

質問

ISO-8859-1(latin1ともいう)でエンコードされたファイルを読み込む必要があるのですが、以下のような感じです。

var file_contents = fs.readFileSync("test_data.html", "latin1");

しかし、Nodeは "latin1" または "ISO-8859-1" が有効なエンコーディングでないことを訴えます ("Error: Unknown encoding").

どのようなエンコーディングが readFileSync を受け入れるか?

解決方法は?

その エンコーディングのリスト がネイティブにサポートしているのは、かなり短いものです。

  • アスキー
  • ベース64
  • ヘックス
  • ucs2/ucs-2/utf16le/utf-16le
  • utf8/utf-8
  • binary/latin1 (ISO8859-1、latin1 は node 6.4.0+ のみ)

6.4.0より古いバージョンを使っている場合や、Unicode以外のエンコーディングを扱いたくない場合は、文字列を再コード化することができます。

使用方法 iconv-lite を使用してファイルを再コード化します。

var iconvlite = require('iconv-lite');
var fs = require('fs');

function readFileSync_encoding(filename, encoding) {
    var content = fs.readFileSync(filename);
    return iconvlite.decode(content, encoding);
}

または iconv :

var Iconv = require('iconv').Iconv;
var fs = require('fs');

function readFileSync_encoding(filename, encoding) {
    var content = fs.readFileSync(filename);
    var iconv = new Iconv(encoding, 'UTF-8');
    var buffer = iconv.convert(content);
    return buffer.toString('utf8');
}