Fold All / Expand All

2017年3月12日 星期日

[Node.js] 用 iconv-lite 做 encoding 轉換

只完成了一個 utamap
目前使用到的 node module
utamap 因為網頁是 eucjp 編碼 (雖然 meta tag 是寫 shift_jis),node.js 內建的 encoding 並沒有包含,所以另外找 module 來處理
看起來有 node-iconv 和 iconv-lite
因為 iconv-lite 的網頁寫說是 pure JavaScript,而且比 node-iconv 更快,那就來試試吧
decode 很簡單
var iconv = require('iconv-lite');

// Convert from an encoded buffer to js string.
str = iconv.decode(new Buffer([0x68, 0x65, 0x6c, 0x6c, 0x6f]), 'win1251');
不過搭配 request-promise 的時候需要注意
因為 request-promise 預設是把內容用 utf8 轉為 String,轉完再丟給 iconv-lite 就來不及啦
所以要在 request-promise 的時候,加參數 encoding: null,根據 request 的文件,沒有下 encoding 參數,也就是 encoding: undefined 時,會用 utf8 去處理,而設為 encoding: null 時,則是回傳 Buffer
Buffer 丟給 iconv-lite 才能正確 decode

沒有留言: