我正在尝试将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');
结果与预期的不同。例如,字符串:“投稿者さんの稚内全日空ホテルのクチコミ(感想・情报)”作为“ ソ ス ソ ス ソ ス e ソ ス メゑソ ス ソ ス ソ ス ソ ス ソ ス ttS ソ ス ソ ス ソ ス z ソ ス e ソ ス ソ ス ソ ス ソ スクソ ス”出现。ソ ス R ソ ス〜(ソ ス ソ ス ソ ス z ソ ス E ソ ス ソ ス ソ ス ソ ス)”
如果我删除//// TRANSLIT /// IGNORE(这将导致它为缺少的字符返回相似的字符,并导致忽略不可转码的字符而失败),则会出现以下错误:错误:EILSEQ,非法字符序列。
我愿意使用任何可以在nodejs中实现的解决方案,但是我的搜索结果并未在nodejs-iconv模块之外产生很多选择。
nodejs-iconv参考:https : //github.com/bnoordhuis/node-iconv
谢谢!
编辑24.06.2011:我已经前进并用Java实现了一个解决方案。但是,如果有人可以解决这个问题,我仍然会对Javascript解决方案感兴趣。
我今天也遇到了同样的麻烦:) 取决于libiconv。您需要libiconv-1.13-ja-1.patch。 请检查以下内容。
或者您可以使用iconv-jp try来避免问题
npm安装图标v-jp