请教GBK和UTF8之间的URL编码转换问题
发布于 13 年前 作者 wheato 39631 次预览 最后一次回复是 9 年前 来自
用了node-iconv库,把UTF-8转换成GBK,然后在encodeURI();但是发现没有真正的转成功。
测试代码
var title = new Iconv('UTF-8', 'GBK').convert('数学').toString();
console.log(encodeURI(title) == '%CA%FD%D1%A7');
请问各位有什么方法,或者是哪个库可以这样转吗?
15 回复
其实我是在写一个爬虫,去抓一个GBK的页面,需要用POST方法去提交参数,如果参数带中文就无法返回正确的结果,英文可以返回。
nodejs里UTF8转GBK,好像是无解的。我试过node-iconv和iconv-lite,都不行,可能是与nodejs有关,因为nodejs本身就不支持gbk,要转成utf8的话还是可以的。
其实是没有问题的,我请求的网页返回的内容也是GBK,用node-iconv可以转成utf-8正确现实。 前面的那个请求参数的问题我也解决了,方案是不是用querystring.stringify.因为这样会把参数中的中文按照utf-8的格式encode。我是将包含中文的参数先用GBK的encode进行编码,然后自己把参数拼接成字符串,这样就不会被转码,从而可以提供正确的请求参数。
@.@靠,恨啊,处理这种编码问题。
JS中的字符串本身就是以字符来存储,而非字节,所以没有所谓的gbk或utf8;而encodeURI本身就会把字串以utf8编码进行url编码;想要以gbk形式转换,就应该以Buffer来按字节处理。应该这样写:
然后再自己写一个urlEncode方法,遍历titleBuffer,将url保留字符或非法字符转成url编码。如果不知道怎么写,建议参考ECMA-262文档。
@wheato 能贴一下代码吗?我参考一下。
嗯嗯。是滴。我就是后面自己进行url编码的。
@asdf33
wow,原来iconv-lite里还提供encode(ai, ‘gbk’),这方法可行。
想请问下楼主,我也在弄一个爬虫,你爬回来的html用什么 库 或者 组件 来解析dom? 想找个省力的工具,免得我自己去匹配,要累死人的。
https://github.com/MatthewMueller/cheerio
@rainman 谢谢。春节前我已经找到这个库了。很棒。
用fetch库,功能等同request,有自动转码功能,其实后台自动调用了iconv-lite。 转码不成功100%的原因是对buffer的处理错误。
楼主,请问中文参数的问题是怎么解决的,遇到了同样问题解决不了啊