codingecho

日々の体験などを書いてます

Node.jsのrequestでShift JISやバイナリーデータを正しく取得する方法

バージョン

request: 2.88.0

問題と解決策

requestパッケージを使ってShift JISやEUC、ZIPなどのバイナリデータを正しく取得する方法です。

日本語の文字コードをUNICODEに変換したり、zipを解凍したりするときには注意が必要です。

request({ url:'http://example.com/data.zip' }, (err, httpResponse, body) => {
    // bodyにバイナリーが入っているはず
    do something...
});

のようなやり方では勝手に body がUTF-8に変換されてしまってうまくいかないです。

なのでオプションで encoding: null を指定する必要があります。

request({ url:'http://example.com/data.zip', encoding: null }, (err, httpResponse, body) => {
    // bodyには生のバイナリーが入る
    do something...
});

このようにするとbodyはUTF-8に変換されずに生のバイナリーを受け取ることができます。

少しハマりました。。

参考

stackoverflow.com