网上的流传的众多帖子教人这样做:

const iconv = require('iconv-lite');
let utf8String   = '我的文字';
let gb2312String = iconv.decode(iconv.encode(utf8String, 'utf-8'), 'gb2312');
  • 1.
  • 2.
  • 3.

gb2312String是什么?其实什么也不是。

正确的做法:

const iconv = require('iconv-lite');
let utf8String   = '我的文字';
let gb2312String = iconv.decode(iconv.encode(utf8String, 'gb2312'), 'gb2312');
  • 1.
  • 2.
  • 3.

为什么呢?

要知道连个概念:

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);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.