node.jsのfsでShift-jisのテキストを文字化けせず読み込む
node.jsのfs.readFile()
を使って、Shift-jisのテキストファイルを読み出したいと思いました。ただし、node.jsはShift-jisをサポートしていないので、通常の方法で読み込むと、文字化けしてしまいます。
そこで、iconv-lite
を使います。iconv-liteは様々な文字コードを変換するモジュールです。
iconv-lite
npm
photo by Mr. Alex Garcia - Double Cliche on flickr
Shift-jisのテキストファイルを読み込む
それでは、Shift-jisのテキストファイルを、node.jsで扱う簡単なコードを載せてみたいと思います。まずはiconv-lite
をnpmインストールします。
1 | $ npm init |
node.jsやコマンドラインについて
node.jsの環境を用意する方法やコマンドラインの使い方については以下を併せてご覧ください。
続いて、node.jsのコードを作成し、以下のように記述します。
1 | $ vim index.js |
1 | var fs = require('fs'); |
読み出そうとするテキストファイルの文字セット(エンコード)がUTF-8の場合は、上記のコードのようにdata.toString('UTF-8')
だけで文字を取り出す事ができます。
だたし、テキストファイルの中身がSHIFT-JISの場合は、iconv-liteを使います。具体的にはiconv.decode(buf, "Shift_JIS")
を使い、文字コードをSHIFT-JISからUTF-8に変換します。
最後にnode.jsを実行します。
1 | $ node index.js |
iconv-liteの主な使い方
iconv-liteの基本的な使い方は、少し分かりにくいのですが、ざっくり言って以下の2つです。
デコード
入力された任意の文字コード文字列が入っているバッファを、文字コードのutf8に変換。
String
で返すエンコード
入力された文字列を、任意の文字コードで変換。
Buffer
で返す
そこで、上記のコードでは、読み込んだテキストデータを一端バッファに変換して、iconv-lite.decode()
に渡しています。
まとめ
いかがだったでしょうか?今回はnode.jsでShif-jis形式のテキストファイルを文字化けすることなく開く方法を解説しました。通常、node.jsではutf-8形式しか開けませんが、iconv-lite
などの変換モジュールを使うと様々な文字セットを開くことができます。