如何使用nodejs iconv模块(或其他解决方案)在nodejs javascript中将字符编码从CP932转换为
How to convert character encoding from CP932 to UTF-8 in nodejs javascript, using the nodejs-iconv module (or other solution)
我正试图用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ソスメゑソスソスソスソスソス ソスtソスソスソスSソスソスソスソスソスzソスeソスソス ソスフクソス`ソスRソス~(ソスソスソスzソスEソスソスソスソス)"
如果我删除//TRANSLIT//IGNORE(这应该会导致它为丢失的字符返回类似的字符,如果不删除,则会省略不可转码的字符),我会得到以下错误:错误:EILSEQ,非法字符序列。
我对使用任何可以在nodejs中实现的解决方案持开放态度,但我的搜索结果并没有在nodejs-iconv模块之外产生太多选项。
nodejs图标参考:https://github.com/bnoordhuis/node-iconv
谢谢!
编辑:2011年6月24日:我已经着手用Java实现了一个解决方案。然而,如果有人能解决这个问题,我仍然对javascript解决方案感兴趣。
我今天遇到了同样的麻烦:)
这取决于性欲。您需要libiconv-113-ja-1.补丁。
请检查以下内容。
- http://d.hatena.ne.jp/ushiboy/20110422/1303481470
- http://code.xenophy.com/?p=1529
或者你可以使用iconvjptry来避免问题
npm安装iconvjp
我遇到了同样的问题,但使用了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.jsnodetest.js。它返回错误。
在Mac OS X Lion上,这个问题似乎取决于gcc。
- nodejs-expressjs上传图像并显示它们
- 在JavaScript中输出转义字符
- 不同浏览器中的空白字符正则表达式行为
- Regex匹配除“”之外的所有字符;.js”;
- TypeError:在不兼容的接收器nodejs上调用了方法Uint8Array.length
- 拆分文本以每隔n个字符添加一行新行,并注意空格
- NodeJS-readline暂停和恢复事件发射器(逐行读取)
- NodeJS日期格式不起作用
- 使用RegExp查找url中的字符
- Nested Q.all nodejs
- 从nodejs-crypto返回的字符串中修剪非ascii字符
- 在 nodejs 中用双引号切片缓冲区时获取额外的字符
- 如何使用nodejs在mongodb集合中搜索重音字符
- “!” 字符在 nodejs 模块名称中有什么作用
- angular -双簧管+ NodeJS流错误前非空白字符
- 麻烦检查退格字符与nodejs的原始stdin
- Parse.com/Nodejs http-request删除特殊字符
- NODEJS:提取两个不同字符之间的字符串并将其存储在数组中
- NodeJs在一系列字符串之后添加字符
- 如何使用nodejs iconv模块(或其他解决方案)在nodejs javascript中将字符编码从CP932转换为