NodeJS笔记:处理非utf8编码

 最近研究了下nodejs读写GBK文件的方法,nodejs原生的API接口如

fs.readFile(filename,[encoding],[callback])

其encoding参数是不支持gbk的。实际上,如果不传encoding参数,返回的结果是一个Buffer类型的对象;如果传入参数,返回的是buffer.toString(encoding)的结果,也就是对一个buffer编码的结果。纯Javascript是Unicode友好的但对于处理二进制数据并不合适。Buffer对象就是为了解决这个问题,我理解Buffer为固定长度的字节数组。现在已经知道encoding参数实际上是交给Buffer.toString方法来处理的。希望Buffer.toString在不久的将来也能原生支持gbk编码。从字节流转换到特定的一种字符编码,我想这应该只是时间问题。

 

    虽然nodejs API不支持GBK字符串,但 iconv 这个nodejs插件模块却提供了类似的功能。来看看它的示例:

var gbk_to_utf8 = new Iconv('GBK', 'UTF8');

var buffer = gbk_to_utf8.convert(fs.readFileSync('path/to/gbkencodefile'));

console.log(buffer.toString());

   构造函数接收两个encoding参数,标识编码转换规则。Iconv实例的convert方法接收一个buffer参数,按Iconv实例的规则进行转换。一般来说,只有buffer里的字节数组能被Iconv实例的fromEncoding正确解码,才能转换到正确的targetEncoding。例如网页爬虫,得事先解析页面的头部,通过"Content-Type"或"charset"得到源编码,再构造一个从源编码到目标编码的Iconv实例,才能得到想要的正确编码的目标数据。因为Buffer.prototype.toString(encoding)不支持GBK,所以暂时还没办法把一个UTF8编码的网页下载下来编码成GBK字符串写入DB或者输出到控制台。Javascript里的字符串只支持UTF8编码,Iconv只在Buffer层做编码转换。

    Iconv是C++编写的node插件,暂时只能在linux环境编译出来,所以在windows下还不能使用。不过从v0.6.0版本做出的对windows的原生支持的努力来看,将来nodejs插件应该也会慢慢支持windows平台。

转载于:https://www.cnblogs.com/zcm123/archive/2013/01/26/2877546.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值