nodejs读取本地中文json文件出现乱码解决方法


Posted in NodeJs onOctober 10, 2018

1. 确定json文件是UTF-8 无BOM编码的的。如果有BOM,会在读取第一行的时候出现乱码。

Per "fs.readFileSync(filename, 'utf8') doesn't strip BOM markers #1918", fs.readFile is
working as designed: BOM is not stripped from the header of the UTF-8 file, if it exists. It at the discretion of the developer to handle this.

Possible workarounds:

  • data= data.replace(/^\uFEFF/, ''); perhttps://github.com/joyent/node/issues/1918#issuecomment-2480359
  • Transform the incoming stream to remove the BOM header with the NPM module bomstrip perhttps://github.com/joyent/node/issues/1918#issuecomment-38491548

What you are getting is the byte order mark header (BOM) of the UTF-8 file. When JSON.parse sees
this, it gives an syntax error (read: "unexpected character" error). You must strip the byte order mark from the file before passing it to JSON.parse:

fs.readFile('./myconfig.json', 'utf8', function (err, data) {
  myconfig = JSON.parse(data.toString('utf8').replace(/^\uFEFF/, ''));
});
// note: data is an instance of Buffer

2. 确定json没有格式错误。我在用utf8编码并用utf8 encoding来读取文件之后依然报错,百思不得其解。

最后发现json有两个editor没有发现的格式错误,一个是一个数组中两个元素之间少了一个“,”,另一个是另一个数组最后多了一个“,”。

注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);// 直接输出中文字符串了  
        }  
    });  
}

nodejs读取中文文件编码问题

准备一个文本文件(当然也可以是csv文件等)test.txt和text.csv,nodejs文件test.js如下:

var iconv = require('iconv-lite');  
  
var fs = require('fs');  
var fileStr = fs.readFileSync('D:\\test.csv', {encoding:'binary'});  
  
var buf = new Buffer(fileStr, 'binary');  
  
var str = iconv.decode(buf, 'GBK');  
console.log(str);  

直接读文件的话是乱码,不信你可以试试。需要先统一用二进制编码方式读取,然后再用GBK解码。

NodeJs 相关文章推荐
Nodejs全栈框架StrongLoop推荐
Nov 09 NodeJs
nodejs开发微博实例
Mar 25 NodeJs
nodejs简单实现操作arduino
Sep 25 NodeJs
Nodejs下用submit提交表单提示cannot post错误的解决方法
Nov 21 NodeJs
nodejs实现邮件发送服务实例分享
Mar 29 NodeJs
nodejs操作mysql实现增删改查的实例
May 28 NodeJs
Nodejs模块的调用操作实例分析
Dec 25 NodeJs
基于Koa(nodejs框架)对json文件进行增删改查的示例代码
Feb 02 NodeJs
Nodejs实现用户注册功能
Apr 14 NodeJs
nodejs的安装使用与npm的介绍
Sep 11 NodeJs
Nodejs实现WebSocket代码实例
May 19 NodeJs
ubuntu系统下使用pm2设置nodejs开机自启动的方法
May 12 NodeJs
nodejs require js文件入口,在package.json中指定默认入口main方法
Oct 10 #NodeJs
nodejs更新package.json中的dependencies依赖到最新版本的方法
Oct 10 #NodeJs
nodejs中用npm初始化来创建package.json的实例讲解
Oct 10 #NodeJs
nodejs初始化init的示例代码
Oct 10 #NodeJs
webpack打包nodejs项目的方法
Sep 26 #NodeJs
Nodejs把接收图片base64格式保存为文件存储到服务器上
Sep 26 #NodeJs
基于Nodejs的Tcp封包和解包的理解
Sep 19 #NodeJs
You might like
探讨PHP JSON中文乱码的解决方法详解
2013/06/06 PHP
解析crontab php自动运行的方法
2013/06/24 PHP
PHP获取不了React Native Fecth参数的解决办法
2016/08/26 PHP
PHP面向对象程序设计之多态性的应用示例
2018/12/19 PHP
js中查找最近的共有祖先元素的实现代码
2010/12/30 Javascript
jquery中dom操作和事件的实例学习-表单验证
2011/11/30 Javascript
情人节专属 纯js脚本1k大小的3D玫瑰效果
2012/02/11 Javascript
JS中图片缓冲loading技术的实例代码
2013/08/29 Javascript
jquery实现点击弹出层效果的简单实例
2014/03/03 Javascript
HTML页面登录时的JS验证方法
2014/05/28 Javascript
简介alert()与console.log()的不同
2015/08/26 Javascript
JavaScript中eval函数的问题
2016/01/31 Javascript
jquery实现页面常用的返回顶部效果
2016/03/04 Javascript
微信小程序模板之分页滑动栏
2017/02/10 Javascript
Ajax异步文件上传与NodeJS express服务端处理
2017/04/01 NodeJs
Vue cli+mui 区域滚动的实例代码
2018/01/25 Javascript
Vue的轮播图组件实现方法
2018/03/03 Javascript
Node.js中的cluster模块深入解读
2018/06/11 Javascript
利用numpy+matplotlib绘图的基本操作教程
2017/05/03 Python
浅谈numpy库的常用基本操作方法
2018/01/09 Python
在python win系统下 打开TXT文件的实例
2018/04/29 Python
Python运维开发之psutil库的使用详解
2018/10/18 Python
python+PyQT实现系统桌面时钟
2020/06/16 Python
python根据url地址下载小文件的实例
2018/12/18 Python
python实现自动获取IP并发送到邮箱
2018/12/26 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
2021/01/22 Python
适合各种场合的美食礼品:Harry & David
2016/08/03 全球购物
享誉全球的多元化时尚精品购物平台:Farfetch发发奇(支持中文)
2017/08/08 全球购物
Topman美国官网:英国著名的国际平价时尚男装品牌
2017/12/22 全球购物
英国历史最悠久的DJ设备供应商:DJ Finance、DJ Warehouse、The DJ Shop
2019/09/04 全球购物
写好自荐信要注意的问题
2013/11/10 职场文书
库房主管岗位职责
2013/12/31 职场文书
创业计划书的写作技巧及要点
2014/01/31 职场文书
护理培训心得体会
2016/01/22 职场文书
应届毕业生的自我评价
2019/06/21 职场文书
Jedis操作Redis实现模拟验证码发送功能
2021/09/25 Redis