网上的流传的众多帖子教人这样做:
const iconv = require('iconv-lite');
let utf8String = '我的文字';
let gb2312String = iconv.decode(iconv.encode(utf8String, 'utf-8'), 'gb2312');
gb2312String是什么?其实什么也不是。
正确的做法:
const iconv = require('iconv-lite');
let utf8String = '我的文字';
let gb2312String = iconv.decode(iconv.encode(utf8String, 'gb2312'), 'gb2312');
为什么呢?
要知道连个概念:
1)utf8String(虽然名字如此)到底是什么?
这个字符串的编码类型与编辑时编辑器使用的的编码类型是一致的,并非一定是utf8.
2)iconv.encode(utf8String, 'utf-8') 到底做什么?
这个操作,是将当前字符集编码的字符串,按utf-8编码格式进行编码。
3)iconv.decode(buf, 'gb2312')到底做什么?
这个操作,是将buf按gb2312字符集转成js字符串,仅此而已。
所以,简简单单使用 iconv.encode(utf8String, 'gb2312'),就实现了gb2312字符集编码,无需画蛇添足。
更进一步测试:
将编辑器设为utf8编码,编辑并运行下面代码:
const iconv = require('iconv-lite');
const utf8String = '我的文字';
let str = iconv.decode(iconv.encode(utf8String, 'utf-8'), 'utf-8');
console.log(str);
str = iconv.decode(iconv.encode(utf8String, 'gb2312'), 'gb2312');
console.log(str);