情報アイランド

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

Node.jsで文字列からBOM(バイトオーダーマーク)を取り除く

2016/04/03

文字コードがUTF-8のテキストファイルを読み込むとテキストの先頭にBOMが付加されていることがあります。

BOMが付加されているとJSON.parse関数で下のようなUnexpected tokenというSyntaxErrorが発生することがあります。他にも予期しないエラーが発生する可能性があります。

SyntaxError: Unexpected token 
    at Object.parse (native)
    at C:\work\node\ejs-render.js:19:44
    at tryToString (fs.js:414:3)
    at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:401:12)

そのため、文字コードがUTF-8のテキストファイルを読み込んだ場合にはBOMを取り除く処理を行っておくべきです。


文字列からBOMを取り除くには、strip-bomパッケージのstrip-bomモジュールを利用します。

stripBom関数を呼び出します。

第1引数にBOMを取り除く文字列を指定します。

返り値としてBOMを取り除いた文字列が得られます。

サンプルコード1

コマンドライン引数として与えられたテキストファイルを読み込み、BOMを取り除き、標準出力に出力します。

strip-bom.js

var fs = require('fs');
var stripBom = require('strip-bom');

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

fs.readFile(process.argv[2], 'utf-8', function (err, data) {
    if (err) {
        console.error(err);
        process.exit(1);
    }
    else {
        var strippedData = stripBom(data);

        console.log(strippedData);
    }
});

使用パッケージ

  • strip-bom
    npm install strip-bomでインストールします。

実行結果

現在のフォルダにはtextfile.txtという名称のテキストファイルが存在しています(文字コードはUTF-8であり、テキストの先頭にBOMが付加されています)。

C:\work\node>type textfile.txt
これはテキストファイルの内容です。
C:\work\node>node strip-bom.js textfile.txt
これはテキストファイルの内容です。

関連

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

-Node.js