Node.js环境中使用GBK编码方式

 更新时间:2026年01月22日 09:34:16   作者:躁动de气球  
NodeJS环境中使用GBK编码,Buffer对象支持多种编码格式,文章介绍NodeJS原生支持的编码格式,并推荐使用iconv-lite进行编码转换

NodeJS环境中使用GBK编码

Node默认支持的编码格式

Node中的Buffer对象支持以下编码(以6.9.1版本为例):参考API[https://npm.taobao.org/mirrors/node/latest/docs/api/buffer.html#buffer_buffers_and_character_encodings]

  • ascii :7-bit ASCII data,舍弃高位
  • utf8 : 多字节编码,大多数情况下String的默认编码格式
  • utf16le : 2或4字节编码
  • base64 : BASE64
  • latin1 (别名 binary): 单字节编码( A way of encoding the Buffer into a one-byte encoded string (as defined by the IANA in RFC1345, page 63, to be the Latin-1 supplement block and C0/C1 control codes))
  • binary : latin1的别名
  • hex : 单字节编码,用2位十六进制数字编码一个字节

GBK与UTF-8

简单说一个是国家标准(GB)、一个是国际标准。

GBK是我国颁布的一种汉字编码,作为一个体系,其前身是GB2312,后来演进为GB18030。这个系列的编码标准致力于解决中国国内面临的文字的编码问题,支持的语言包括中文汉字(简体)、日语、韩语、藏文、蒙文、维吾尔文等,主要还是中文。常见汉字用两个字节编码。

UTF-8是一种国际标准,同一个体系的还有UTF-16等。UTF-8致力于解决地球上全部文字的编码表示问题,除了东亚文字还包括其他语言的编码,如波斯文。其编码一个文字采用两个或三个字节。

一个常用汉字占用的字节数:

  • GB2312:2字节,GBK:2字节,GB18030:2字节,UTF-8:3字节

稀有的汉字:

  • GB2312: 不包含, GBK:包含,GB18030:包含,UTF-8:包含

特别稀有的汉字:

  • GB2312: 不包含, GBK:不包含,GB18030:包含,UTF-8:不包含

两种编码同时存在,且会长期共存。同一个系统内部尽量不要混用。

使用iconv-lite做编码转换

Node环境下处理汉字编码常用的有iconv和iconv-lite,前者使用二进制库实现,后者纯JS实现(性能上后者略好【没有实际测试】),这里只介绍iconv-lite[https://npm.taobao.org/package/iconv-lite]
iconv-lite支持的编码格式包括:

  • 所有node.js原生支持的编码: utf8, ucs2 / utf16-le, ascii, binary, base64, hex.
  • 其他unicode编码: utf16, utf16-be, utf-7, utf-7-imap.
  • 所有常见单字节编码:Windows 125x系列, ISO-8859系列, IBM/DOS codepages, Macintosh系列, KOI8系列, 其他iconv库支持的编码. 支持latin1, us-ascii这类别名.
  • 所有常见多字节编码: CP932, CP936, CP949, CP950, GB2313, GBK, GB18030, Big5, Shift_JIS, EUC-JP.

官方给出的例子:

var iconv = require('iconv-lite');
str = iconv.decode(new Buffer([0x68, 0x65, 0x6c, 0x6c, 0x6f]), 'win1251');
buf = iconv.encode("Sample input string", 'win1251');

也支持Stream方式使用,参见 https://npmmirror.com/package/iconv-lite

对于早期版本的Node,可以通过extendNodeEncodings在不影响代码结构的情况下扩展Node各原生接口支持的编码种类;这种方式在较新版本(v4+)已经废弃无法使用。

给出一个从GBK文件读取内容,然后编码转存为UTF-8编码的例子:

var buffer = Buffer.from(fs.readFileSync('gbkFile.txt',{encoding:'binary'}),'binary');
console.log(buffer);//得到文件内容对应的Buffer
var text = iconv.decode(buffer,'GBK');//使用GBK解码
console.log(text);
//console.log(iconv.encode(text, 'utf8'));
//console.log(iconv.encode(text, 'gbk'));
fs.writeFileSync('utfFile.txt',iconv.encode(text, 'utf8'),'binary'); //按二进制方式写入
fs.writeFileSync('utfFile2.txt',text,'utf8'); //按UTF8写入

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • nvm报错Now using node v版本号(64-bit)图文解决方法

    nvm报错Now using node v版本号(64-bit)图文解决方法

    这篇文章主要给大家介绍了关于nvm报错Now using node v版本号(64-bit)的解决方法,文中将解决的办法介绍的非常详细,对遇到这个问题的朋友具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-11-11
  • node.js中的events.emitter.once方法使用说明

    node.js中的events.emitter.once方法使用说明

    这篇文章主要介绍了node.js中的events.emitter.once方法使用说明,本文介绍了events.emitter.once的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • node Buffer缓存区常见操作示例

    node Buffer缓存区常见操作示例

    这篇文章主要介绍了node Buffer缓存区常见操作,涉及node.js操作Buffer缓存的创建、写入、读取、转换等相关实现技巧,需要的朋友可以参考下
    2019-05-05
  • Nodejs文件上传、监听上传进度的代码

    Nodejs文件上传、监听上传进度的代码

    这篇文章主要介绍了Nodejs文件上传、监听上传进度,本文通过实例代码给大家详细介绍,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • node中token的生成与解析配置

    node中token的生成与解析配置

    本文主要介绍了node中token的生成与解析配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-09-09
  • Rust与NodeJs web开发对比总结大全

    Rust与NodeJs web开发对比总结大全

    Rust编译的Wasm模块在Node.js中运行,可实现高性能计算后端,同时利用JavaScript的灵活性,这篇文章主要介绍了Rust与NodeJs web开发对比的相关资料,需要的朋友可以参考下
    2026-01-01
  • 玩转NODE.JS(四)-搭建简单的聊天室的代码

    玩转NODE.JS(四)-搭建简单的聊天室的代码

    本篇文章主要介绍了利用NODE.JS搭建简单的聊天室的代码,有需要的可以了解一下。
    2016-11-11
  • 使用Node.js实现一个文章生成器

    使用Node.js实现一个文章生成器

    本文将从零开始,讲解如何使用Node.js来实现一个文章生成器,node里面有很多优秀的模块,现在我们就借助node的fs模块来操控文本,来实现我们想要的效果,感兴趣的小伙伴跟着小编一起来看看吧
    2024-07-07
  • Node.js与Sails redis组件的使用教程

    Node.js与Sails redis组件的使用教程

    这篇文章主要介绍了Node.js与Sails redis组件的使用教程,主要介绍几个用法,为string,set,hash和list的使用。需要的朋友可以参考下
    2017-02-02
  • node模块机制与异步处理详解

    node模块机制与异步处理详解

    这篇文章主要介绍了node模块机制与异步处理详解的相关资料,需要的朋友可以参考下
    2016-03-03

最新评论