Buffer对象可以与字符串之间相互转换。目前支持的字符串编码类型如下:
1.ASCII
2.UTF-8
3.UTF-16LE/UCS-2
4.Base64
5.Binary
6.Hex
6.2.1 字符串转Buffer
字符串转Buffer通过构造函数完成,如new Buffer(str,[encoding]),Encoding不传时,默认用UTF-8编码。另外Buffer里可以同时支持多个编码类型进行转换,所以在使用时需要额外注意。
6.2.2 Buffer转字符串
实现Buffer向字符串的转换可以通过Buffer对象的toString方法,如下:
buf.toString([encoding],[start],[end])
如果Buffer对象由多种编码写入,就需要在局部指定不同的编码,才能转换回正常的编码。
6.2.3 Buffer不支持的编码类型
Buffer只支持有限的编码类型,如果想判断是否支持该编码,可以通过Buffer.isEncoding(encoding)
常用的中文编码,如GBK,GB2312和BIG-5等都不支持。对于不支持的编码,可以使用第三方库,如iconv-lite或iconv实现,前者是纯Javascript实现,后者通过c++间接调用libiconv库,采用的话需要消耗一定的CPU。
另外iconv和iconv-lite对无法转换的内容进行降级处理的方案不尽相同。iconv-lite无法转换的内容如果是多字节,会输出乱码。iconv则有三级降级策略,会尝试翻译无法转换的内容,或者忽略这些内容。如果不设置忽略,iconv对于无法转换的内容将会得到EILSEQ异常。