今回のサンプルアプリで利用するnpmモジュールは、
"request": "^2.55.0",
"encoding-japanese": "^1.0.23"
これだけです。
package.json
{ "name": "Example", "description": "SJISなデータをGETしてUNICODE(js文字コード)に返還するサンプル", "version": "0.0.1", "private": true, "dependencies": { "request": "^2.55.0", "encoding-japanese": "^1.0.23" } }
server.js
var http = require('http'); var request = require('request'); var encoding = require('encoding-japanese'); http.createServer(function(req, res) { res.writeHead(200, { 'Content-Type': 'text/plain' }); // SJISなレスポンスを返すURL var url: 'http://ai.2ch.sc/newsalpha/dat/9990000001.dat'; var requestSettings = { method: 'GET', url: url, encoding: null // レスポンスをバイナリデータとして取得 }; request(requestSettings, function(error, response, body) { // body にはバイナリデータ(Bufferオブジェクト)が格納されてくる // SJIS から UNICODE (JSが扱うコード) へ返還 var unicodeArr = encoding.convert(body, { from: 'SJIS', to: 'UNICODE' }); // UNICODEな文字列に変換 // これでstrはJS上で普通の文字列として扱えるようになる var str = encoding.codeToString(unicodeArr); console.log(str); res.end('Hello World\n'); }); }).listen(1337, '127.0.0.1'); console.log('Server running at http://127.0.0.1:1337/');
npmインストールしてからWebサーバを起動
$ npm install $ node server.js
Webサーバが立ち上がったら http://127.0.0.1:1337/ をブラウザから叩いてみてください。
2chのSJISなDATデータが文字化けせずにコンソールログ出力されたと思います。
文字列をエンコードする方法なら他にも Iconv などのモジュールを利用する方法もあると思いますが、Shift_JIS→Unicodeの変換だけであれば今回紹介した方法が最もシンプルではないかと思っています。
最近はShift_JISを採用しているシステムもかなり珍しくなってきましたが、古いシステムだと未だ普通に使ってたりしますので、知っておくといつか役立つ時が来るかもしれませんね。
0 件のコメント:
コメントを投稿