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

我试图将string从CP932(aka Windows-31J)转换为javascript中的utf8。 基本上,我正在爬取一个忽略请求头中的utf-8请求的站点,并返回cp932编码的文本(即使html元标记表示页面是shift_jis)。

无论如何,我有整个页面存储在一个名为“HTML”的stringvariables。 从那里我试图将其转换为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'); 

结果不是它应该是什么。 例如,string“感觉·情报”(感兴趣的信息)出来了:“这是一个真实的故事,ソスRソス〜(ソスソスソスEソスソスソスソス)“

如果我删除// TRANSLIT // IGNORE(这应该导致它返回相似字符的缺less字符,并失败,省略非转码字符),我得到这个错误:错误:EILSEQ,非法字符序列。

我愿意使用任何可以在nodejs中实现的解决scheme,但是我的search结果并没有在nodejs-iconv模块之外获得许多选项。

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

谢谢!

编辑24.06.2011:我已经在Java中实现了一个解决scheme。 不过,如果有人可以解决这个问题,我仍然对这个问题的JavaScript解决scheme感兴趣。

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

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

  npm安装iconv-jp 

我有同样的问题,但与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() // ... }) 

https://github.com/bnoordhuis/node-iconv/issues/19

我试过/Users/Me/node_modules/iconv/test.js节点test.js. 它返回错误。

在Mac OS X Lion上,这个问题似乎取决于gcc。