node.jsのhttpモジュールでutf-8以外のデータをもってくる場合

それくらい標準でやってくれよと思うところもあるのですが外部モジュールでやるもののようです

qiita.com

info-i.net

今回は後者の iconv-liteを使いました。liteのほうが他の依存モジュールが無いので楽。

var iconvLite = require('iconv-lite')
var title = iconvLite.decode(actress_name, "EUC-jp")
console.log(title)

ソースはこんなものですが上手く行きません。文字化けしたままです。

いろいろ調べてみるとどうやらサンプル持ってきたそのままで、今まではutf-8のページばっかり扱ったので上手く行ってただけのsetEncodingがutf8決め打ちがまずいらしい。

var client = http.get(url, function (res) {
var data = ''
if (res.statusCode === 200) {
res.setEncoding('utf8');
res.on('data', function (chunk) {
data += chunk
})
res.on('end', function () {
f(url, data)
})
}

 

 ここを元データの文字コードであるEUC-JPにすると詳しいことはメモらなかったが「知らない文字コード」という類のエラーがでる。

 最終的に上手く行ったのはバイナリを扱うように生データで持ってくるのがいいらしい

res.setEncoding('binary');

その辺の経緯はここのページが参考になる。やっぱり勝手なことしてくれてるのね

qiita.com

それにしても、はてなブログになってから初めてソースコード貼り付けしたが使いにくいことこの上ないな、この「見たまま編集」。貼り付けたソースは色付けとかタブとか修正しようがないみたいなので参考程度に。変な改行とか入ってるし。

便利なようで勝手なことやってくれてるというのは、今回のトラブルと同じか。

markdown記法でも覚えるかな。