详解Node.js读写中文内容文件操作


Posted in Javascript onOctober 10, 2018

由于Node.js仅支持如下编码:utf8, ucs2, ascii, binary, base64, hex,并不支持中文GBK或GB2312之类的编码,

因此如果要读写GBK或GB2312格式的文件的中文内容,必须要用额外的模块:iconv-lite

1、安装模块:npm install iconv-lite

2、演示代码,把下面的代码复制到一个文件中,假设是ch.js(注意:js文件必须保存为utf8编码格式):

// 加载File System读写模块
var fs = require('fs');
// 加载编码转换模块
var iconv = require('iconv-lite'); 
 
var file = "c:\\a.txt";
writeFile(file);
readFile(file);
 
function writeFile(file){
 // 测试用的中文
 var str = "\r\n我是一个人Hello myself!";
 // 把中文转换成字节数组
 var arr = iconv.encode(str, 'gbk');
 console.log(arr);
 
 // appendFile,如果文件不存在,会自动创建新文件
 // 如果用writeFile,那么会删除旧文件,直接写新文件
 fs.appendFile(file, arr, function(err){
  if(err)
   console.log("fail " + err);
  else
   console.log("写入文件ok");
 });
}
 
function readFile(file){
 fs.readFile(file, function(err, data){
  if(err)
   console.log("读取文件fail " + err);
  else{
   // 读取成功时
   // 输出字节数组
   console.log(data);
   // 把数组转换为gbk中文
   var str = iconv.decode(data, 'gbk');
   console.log(str);
  }
 });
}

3、用node.exe执行这个js文件,结果如下:

C:\>node ch.js
<Buffer 0d 0a ce d2 ca c7 d2 bb b8 f6 c8 cb 48 65 6c 6c 6f 20 6d 79 73 65 6c 66 21>
写入文件ok
<Buffer 0d 0a ce d2 ca c7 d2 bb b8 f6 c8 cb 48 65 6c 6c 6f 20 6d 79 73 65 6c 66 21>
 
我是一个人Hello myself!
 
C:\>

注1:Node的iconv模块,仅支持linux,不支持Windows,因此要用纯js的iconv-lite,另:作者说iconv-lite的性能更好,具体参考git站点:iconv-lite

注2:我在测试读写文件时,始终无法把中文写入文件,一直乱码,读取正常,后来同事帮我发现:js文件的编码格式是ansi,nodejs的代码文件必须是utf8格式

注3:如果程序操作的文件,都是以UTF8编码格式保存的,那么就不需要使用iconv模块,直接以utf8格式读取文件即可,如:

// 参数file,必须保存为utf8格式,否则里面的中文会乱码
function readFile(file){
 // readFile的第2个参数表示读取编码格式,如果未传递这个参数,表示返回Buffer字节数组
 fs.readFile(file, "utf8", function(err, data){
  if(err)
   console.log("读取文件fail " + err);
  else{
   // 读取成功时
   console.log(data);// 直接输出中文字符串了
  }
 });
}

结论:使用node.js开发时,无论是代码文件,还是要读写的其它文件,都建议使用UTF8编码格式保存,这样可以无需额外的模块支持

Javascript 相关文章推荐
javascript call方法使用说明
Jan 11 Javascript
关于Javascript模块化和命名空间管理的问题说明
Dec 06 Javascript
Jquery ajax执行顺序 返回自定义错误信息(实例讲解)
Nov 06 Javascript
js中把JSON字符串转换成JSON对象最好的方法
Mar 21 Javascript
jQuery根据元素值删除数组元素的方法
Jun 24 Javascript
javascript合并表格单元格实例代码
Jan 03 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
Sep 28 Javascript
Node连接mysql数据库方法介绍
Feb 07 Javascript
最通俗易懂的javascript变量提升详解
Aug 05 Javascript
使用vue实现一个电子签名组件的示例代码
Jan 06 Javascript
vue项目在线上服务器访问失败原因分析
Aug 14 Javascript
基于vue中的scoped坑点解说
Sep 04 Javascript
angular6的响应式表单的实现
Oct 10 #Javascript
JS原生带缩略图的图片切换效果
Oct 10 #Javascript
js实现前面自动补全位数的方法
Oct 10 #Javascript
Egg.js 中 AJax 上传文件获取参数的方法
Oct 10 #Javascript
轻量级富文本编辑器wangEditor结合vue使用方法示例
Oct 10 #Javascript
解决eclipse中没有js代码提示的问题
Oct 10 #Javascript
js实现同一个页面,多个enter事件绑定的示例
Oct 10 #Javascript
You might like
PHP 写文本日志实现代码
2010/05/18 PHP
PHP中的string类型使用说明
2010/07/27 PHP
Yii框架中memcache用法实例
2014/12/03 PHP
Zend Framework教程之Resource Autoloading用法实例
2016/03/08 PHP
PHP面向对象之事务脚本模式(详解)
2017/06/07 PHP
详解Yii2 之 生成 URL 的方法
2017/06/16 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
2019/03/01 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
javascript break指定标签打破多层循环示例
2014/01/20 Javascript
JS将制定内容复制到剪切板示例代码
2014/02/11 Javascript
javascript的解析执行顺序在各个浏览器中的不同
2014/03/17 Javascript
iframe里的页面禁止右键事件的方法
2014/06/10 Javascript
Javascript实现的Map集合工具类完整实例
2015/07/31 Javascript
jQuery实现可以控制图片旋转角度效果(附demo源码下载)
2016/01/27 Javascript
JavaScript+canvas实现七色板效果实例
2016/02/18 Javascript
jQuery插件制作的实例教程
2016/05/16 Javascript
Angular 项目实现国际化的方法
2018/01/08 Javascript
vue2 v-model/v-text 中使用过滤器的方法示例
2019/05/09 Javascript
JS函数动态传递参数的方法分析【基于arguments对象】
2019/06/05 Javascript
vue实现购物车案例
2020/05/30 Javascript
Python 闭包的使用方法
2017/09/07 Python
浅析python实现scrapy定时执行爬虫
2018/03/04 Python
python SMTP实现发送带附件电子邮件
2018/05/22 Python
使用Python制作缩放自如的圣诞老人(圣诞树)
2019/12/25 Python
PyQt中使用QtSql连接MySql数据库的方法
2020/07/28 Python
学生如何注册Pycharm专业版以及pycharm的安装
2020/09/24 Python
linux系统下pip升级报错的解决方法
2021/01/31 Python
国际领先的学术出版商:Springer
2017/01/11 全球购物
法国包包和行李箱销售网站:Bagage24.fr
2020/03/24 全球购物
学生鉴定评语大全
2014/05/05 职场文书
教导主任竞聘演讲稿
2014/05/16 职场文书
纺织工程专业推荐信
2014/09/08 职场文书
“四风”问题整改措施和努力方向
2014/09/20 职场文书
民主生活会剖析材料
2014/09/30 职场文书
2015年春节标语口号
2014/12/09 职场文书
学校就业保障协议书
2019/06/24 职场文书