6

我正在尝试在javascript中将字符串从CP932(又名Windows-31J)转换为utf8。基本上,我正在抓取一个忽略请求标头中的 utf-8 请求并返回 cp932 编码文本的站点(即使 html 元标记表明该页面是 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');

结果不是它应该的样子。例如,字符串:“投稿者さんの稚内全日空ホテルのクチコミ(感想·感想icitory)”出来“ソスソスソスeソスメゑソスソスソスソスソスソスソスソスソスsソスソスソスソスソスzソスeソスソス`ソスRソス~(ソスソスソzソスEソスソスソスソス)"

如果我删除 //TRANSLIT//IGNORE (这应该会导致它为丢失的字符返回相似的字符,并且没有省略不可转码的字符),我会收到此错误:错误:EILSEQ,非法字符序列。

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

nodejs-iconv 参考:https ://github.com/bnoordhuis/node-iconv

谢谢!

编辑 24.06.2011:我已经开始用 Java 实现了一个解决方案。但是,如果有人可以解决这个问题,我仍然会对这个问题的 javascript 解决方案感兴趣。

4

3 回答 3

5

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

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

npm install iconv-jp
于 2011-08-28T11:30:44.320 回答
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()
    // ...
})
于 2013-01-10T10:26:11.103 回答
0

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

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

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

于 2011-09-02T01:53:07.183 回答