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