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 win7下安装方法
May 24 NodeJs
nodejs实现的一个简单聊天室功能分享
Dec 06 NodeJs
NodeJS中Buffer模块详解
Jan 07 NodeJs
NodeJS学习笔记之Connect中间件模块(一)
Jan 27 NodeJs
NodeJs中的VM模块详解
May 06 NodeJs
nodejs 的 session 简单使用
Jun 06 NodeJs
nodejs入门教程四:URL相关模块用法分析
Apr 24 NodeJs
nodejs 最新版安装npm 的使用详解
Jan 18 NodeJs
nodejs读取并去重excel文件
Apr 22 NodeJs
nodejs脚本centos开机启动实操方法
Mar 04 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数组操作汇总 php数组的使用技巧
2011/07/17 PHP
php中file_get_content 和curl以及fopen 效率分析
2014/09/19 PHP
php判断两个日期之间相差多少个月份的方法
2015/06/18 PHP
PHP全功能无变形图片裁剪操作类与用法示例
2017/01/10 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
2018/09/26 PHP
javascript:history.go()和History.back()的区别及应用
2012/11/25 Javascript
用Js实现的动态增加表格示例自己写的
2013/10/21 Javascript
jQuery根据ID获取input、checkbox、radio、select的示例
2014/08/11 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
jQuery实现图片轮播效果代码(基于jquery.pack.js插件)
2016/06/02 Javascript
JS实现数字格式千分位相互转换方法
2016/08/01 Javascript
JavaScript中splice与slice的区别
2017/05/09 Javascript
Bootstrap fileinput文件上传预览插件使用详解
2017/05/16 Javascript
Angular.js中数组操作的方法教程
2017/07/31 Javascript
微信小程序switch开关选择器使用详解
2018/01/31 Javascript
详解JavaScript 中 if / if...else...替换方式
2018/07/15 Javascript
vue项目部署到Apache服务器中遇到的问题解决
2018/08/24 Javascript
[05:49]2014DOTA2TI4正赛第二日综述 昔日冠军纷纷落马 VG LGD占尽先机
2014/07/20 DOTA
[43:14]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
Python实现的一个简单LRU cache
2014/09/26 Python
Python中return语句用法实例分析
2015/08/04 Python
Python文件处理
2016/02/29 Python
Python实现TCP/IP协议下的端口转发及重定向示例
2016/06/14 Python
Python给你的头像加上圣诞帽
2018/01/04 Python
在Python中使用Neo4j的方法
2019/03/14 Python
python爬虫破解字体加密案例详解
2021/03/02 Python
StubHub哥伦比亚:购买和出售您的门票
2016/10/20 全球购物
幼儿园家长会欢迎词
2014/01/09 职场文书
自荐信需注意事项
2014/01/25 职场文书
两只小狮子教学反思
2014/02/05 职场文书
食品流通安全承诺书
2014/05/22 职场文书
金融专业求职信
2014/08/05 职场文书
公积金具结保证书
2015/05/11 职场文书
2016三八妇女节慰问信
2015/11/30 职场文书
深度学习详解之初试机器学习
2021/04/14 Python
详解Java实践之抽象工厂模式
2021/06/18 Java/Android