一尘不染

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

node.js

我正在尝试将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解决方案感兴趣。


阅读 884

收藏
2020-07-07

共1个答案

一尘不染

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

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

npm安装图标v-jp
2020-07-07