如何使用nodejs-iconv模块(或其他解决方案)在nodejs javascript中将字符编码从CP932转换为UTF-8

Bri*_*ian 6 javascript character-encoding iconv serverside-javascript node.js

我正在尝试将字符串从CP932(也称为Windows-31J)转换为jf中的utf8.基本上我正在抓取一个忽略请求头中的utf-8请求并返回cp932编码文本的站点(即使html metatag表明该页面是shift_jis).

无论如何,我将整个页面存储在一个名为"html"的字符串变量中.从那里我试图使用以下代码将其转换为utf8:

var Iconv = require('iconv').Iconv;
var conv = new Iconv('CP932', 'UTF-8//TRANSLIT//IGNORE');

var myBuffer = new Buffer(html.length * 3);
myBuffer.write(html, 0, 'utf8')
var utf8html = (conv.convert(myBuffer)).toString('utf8');
Run Code Online (Sandbox Code Playgroud)

结果不是它应该是什么.例如,字符串: "投稿者さんの稚内全日空ホテルのクチコミ(感想·情报)" 出来作为"ソスソスソスËソスメゑソスソスソスソスソスソス吨ソスソスソス小号ソスソスソスソスソスŽソスËソスソスソスフクソス`ソスRソス〜(ソスソスソスzソスEソスソスソスソス)"

如果我删除// TRANSLIT // IGNORE(这会导致它返回缺少字符的类似字符,并且没有省略不可转码的字符),我收到此错误:错误:EILSEQ,非法字符序列.

我愿意使用可以在nodejs中实现的任何解决方案,但是我的搜索结果在nodejs-iconv模块之外没有产生很多选项.

nodejs-iconv ref:https://github.com/bnoordhuis/node-iconv

谢谢!

编辑24.06.2011:我已经开始实施Java解决方案.但是如果有人能解决这个问题,我仍然会对这个问题的javascript解决方案感兴趣.

小智 5

我今天遇到了同样的麻烦:)
这取决于libiconv.你需要libiconv-1.13-ja-1.patch.
请检查以下内容.

或者你可以使用iconv-jp尝试避免问题

npm install iconv-jp


hor*_*sek 5

我有同样的问题,但CP1250.我到处寻找问题,一切都很好,除了要求的召唤 - 我不得不补充encoding: 'binary'.

request = require('request')
Iconv  = require('iconv').Iconv

request({uri: url, encoding: 'binary'}, function(err, response, body) {
    body = new Buffer(body, 'binary')
    iconv = new Iconv('CP1250', 'UTF8')
    body = iconv.convert(body).toString()
    // ...
})
Run Code Online (Sandbox Code Playgroud)