详解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 相关文章推荐
Js 导出table内容到Excel的简单实例
Nov 19 Javascript
JQuery记住用户名密码实现下次自动登录功能
Apr 27 Javascript
JavaScript编写连连看小游戏
Jul 07 Javascript
js实现仿Discuz文本框弹出层效果
Aug 13 Javascript
JavaScript获取各大浏览器信息图示
Nov 20 Javascript
全国省市二级联动下拉菜单 js版
May 10 Javascript
vue开发调试神器vue-devtools使用详解
Jul 13 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
Jul 26 Javascript
jquery-file-upload 文件上传带进度条效果
Nov 21 jQuery
jQuery实现的页面弹幕效果【测试可用】
Aug 17 jQuery
vue学习笔记之给组件绑定原生事件操作示例
Feb 27 Javascript
详解Howler.js Web音频播放终极解决方案
Aug 23 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递归调用数组值并用其执行指定函数的方法
2015/04/01 PHP
LazyLoad 延迟加载(按需加载)
2010/05/31 Javascript
判断多个input type=file是否有已经选择好文件的代码
2012/05/23 Javascript
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
2012/08/14 Javascript
js获得当前系统日期时间的方法
2015/05/06 Javascript
JavaScript生成福利彩票双色球号码
2015/05/15 Javascript
简介JavaScript中valueOf()方法的使用
2015/06/05 Javascript
常用原生js自定义函数总结
2016/11/20 Javascript
JQuery页面随滚动条动态加载效果的简单实现(推荐)
2017/02/08 Javascript
JS组件系列之MVVM组件 vue 30分钟搞定前端增删改查
2017/04/28 Javascript
JavaScript之创意时钟项目(实例讲解)
2017/10/23 Javascript
详解webpack3编译兼容IE8的正确姿势
2017/12/21 Javascript
微信小程序开发之改变data中数组或对象的某一属性值
2018/07/05 Javascript
微信小程序webview 脚手架使用详解
2019/07/22 Javascript
在node环境下parse Smarty模板的使用示例代码
2019/11/15 Javascript
jquery将信息遍历到界面上实例代码
2020/01/21 jQuery
JavaScript oncopy事件用法实例解析
2020/05/13 Javascript
Postman动态获取返回值过程详解
2020/06/30 Javascript
Python中的数据对象持久化存储模块pickle的使用示例
2016/03/03 Python
详解duck typing鸭子类型程序设计与Python的实现示例
2016/06/03 Python
Python中Scrapy爬虫图片处理详解
2017/11/29 Python
浅谈Pandas 排序之后索引的问题
2018/06/07 Python
Python传递参数的多种方式(小结)
2019/09/18 Python
pytorch实现建立自己的数据集(以mnist为例)
2020/01/18 Python
基于pycharm实现批量修改变量名
2020/06/02 Python
HTML5探秘:用requestAnimationFrame优化Web动画
2018/06/03 HTML / CSS
美国最大的万圣节服装网站:HalloweenCostumes.com
2017/10/12 全球购物
瑞典轮胎在线:Tirendo.se
2018/06/21 全球购物
瑞士领先的网上超市:LeShop.ch
2018/11/14 全球购物
罗技英国官方网站:Logitech UK
2020/11/03 全球购物
社区工作者思想汇报
2014/01/13 职场文书
安全生产管理合理化建议书
2014/03/12 职场文书
实训报告范文大全
2014/11/04 职场文书
2014年社区宣传工作总结
2014/12/02 职场文书
同步小康驻村工作简报
2015/07/20 职场文书
物业保洁员管理制度
2015/08/05 职场文书