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实现PHP的print_r函数代码
Mar 14 NodeJs
NodeJS学习笔记之Connect中间件模块(二)
Jan 27 NodeJs
nodejs创建web服务器之hello world程序
Aug 20 NodeJs
NodeJs使用Mysql模块实现事务处理实例
May 31 NodeJs
Nodejs 复制文件/文件夹的方法
Aug 24 NodeJs
Linux Centos7.2下安装nodejs&npm配置全局路径的教程
May 15 NodeJs
nodejs中方法和模块用法示例
Dec 24 NodeJs
nodejs基础之多进程实例详解
Dec 27 NodeJs
nodejs使用async模块同步执行的方法
Mar 02 NodeJs
NodeJS实现一个聊天室功能
Nov 25 NodeJs
nodejs中使用worker_threads来创建新的线程的方法
Jan 22 NodeJs
浅谈Node的内存泄露问题
May 06 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开发大型项目的一点经验
2006/10/09 PHP
php连接mysql数据库代码
2009/03/10 PHP
PHP运行模式的深入理解
2013/06/03 PHP
PHP中单引号与双引号的区别分析
2014/08/19 PHP
帝国cms目录结构分享
2015/07/06 PHP
PHP输出XML格式数据的方法总结
2017/02/08 PHP
JavaScript脚本性能优化注意事项
2008/11/18 Javascript
Asp.net下使用Jquery Ajax传送和接收DataTable的代码
2010/09/12 Javascript
基于jquery的复制网页内容到WORD的实现代码
2011/02/16 Javascript
js自定义事件及事件交互原理概述(一)
2013/02/01 Javascript
解析Javascript中大括号“{}”的多义性
2013/12/02 Javascript
JavaScript 事件对象介绍
2015/04/13 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
2015/05/26 Javascript
JavaScript中字面量与函数的基本使用知识
2015/10/20 Javascript
jQuery表单对象属性过滤选择器实例详解
2016/09/13 Javascript
AngularJS模仿Form表单提交的实现代码
2016/12/08 Javascript
vue 实现剪裁图片并上传服务器功能
2018/03/01 Javascript
vue axios数据请求get、post方法及实例详解
2018/09/11 Javascript
深入理解javascript prototype的相关知识
2019/09/19 Javascript
ES6常用小技巧总结【去重、交换、合并、反转、迭代、计算等】
2019/12/21 Javascript
在vue中封装方法以及多处引用该方法详解
2020/08/14 Javascript
[01:30:55]VG vs Mineski Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
Python实现删除时保留特定文件夹和文件的示例
2018/04/27 Python
Python爬虫动态ip代理防止被封的方法
2019/07/07 Python
python障碍式期权定价公式
2019/07/19 Python
python根据时间获取周数代码实例
2019/09/30 Python
详解Python 重学requests发起请求的基本方式
2020/02/07 Python
Pycharm Plugins加载失败问题解决方案
2020/11/28 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
What is EJB
2016/07/22 面试题
实习自我评价怎么写
2013/12/02 职场文书
护士在校生自荐信
2014/02/01 职场文书
冰峪沟导游词
2015/02/09 职场文书
同学毕业留言寄语
2015/02/27 职场文书
大学军训通讯稿(2016最新版)
2015/12/21 职场文书
索尼ICF-5900W收音机测评
2022/04/24 无线电