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中require路径问题
May 07 NodeJs
nodejs实现bigpipe异步加载页面方案
Jan 26 NodeJs
nodejs加密Crypto的实例代码
Jul 07 NodeJs
Nodejs进阶:核心模块net入门学习与实例讲解
Nov 21 NodeJs
详解Windows下安装Nodejs步骤
May 18 NodeJs
NodeJs通过async/await处理异步的方法
Oct 09 NodeJs
详解Nodejs 通过 fs.createWriteStream 保存文件
Oct 10 NodeJs
详解IWinter 一个路由转控制器的 Nodejs 库
Nov 15 NodeJs
nodejs基于WS模块实现WebSocket聊天功能的方法
Jan 12 NodeJs
nodejs中Express与Koa2对比分析
Feb 06 NodeJs
nodejs log4js 使用详解
May 31 NodeJs
Nodejs实现图片上传、压缩预览、定时删除功能
Oct 25 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/12/06 PHP
PHP使用递归生成文章树
2015/04/21 PHP
thinkphp实现图片上传功能
2016/01/13 PHP
PHP实现单例模式建立数据库连接的方法分析
2020/02/11 PHP
JQuery实现自定义对话框的代码
2008/06/15 Javascript
用Javascript 和 CSS 实现脚注(Footnote)效果
2009/09/09 Javascript
jquery.Ajax()方法调用Asp.Net后台的方法解析
2014/02/13 Javascript
JavaScript的21条基本知识点
2014/03/04 Javascript
JavaScript代码编写中各种各样的坑和填坑方法
2014/06/06 Javascript
跟我学习javascript的函数调用和构造函数调用
2015/11/16 Javascript
JS与jQ读取xml文件的方法
2015/12/08 Javascript
jquery正则表达式验证(手机号、身份证号、中文名称)
2015/12/31 Javascript
javascript中select下拉框的用法总结
2016/01/07 Javascript
JS未跨域操作iframe里的DOM
2016/06/01 Javascript
终于实现了!精彩的jquery弹幕效果
2016/07/18 Javascript
AngularJS中过滤器的使用与自定义实例代码
2016/09/17 Javascript
jQuery实现html table行Tr的复制、删除、计算功能
2017/07/10 jQuery
AngularJS 仿微信图片手势缩放的实例
2017/09/28 Javascript
angularJs提交文本框数据到后台的方法
2018/10/08 Javascript
jquery的$().each和$.each的区别
2019/01/18 jQuery
微信小程序结合Storage实现搜索历史效果
2019/05/18 Javascript
Vue 实现CLI 3.0 + momentjs + lodash打包时优化
2019/11/13 Javascript
JS数组方法concat()用法实例分析
2020/01/18 Javascript
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
python logging类库使用例子
2014/11/22 Python
Python实现字符串匹配算法代码示例
2017/12/05 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
2018/11/20 Python
PyQT5 QTableView显示绑定数据的实例详解
2019/06/25 Python
使用Python和Scribus创建一个RGB立方体的方法
2019/07/17 Python
基于Python爬取fofa网页端数据过程解析
2020/07/13 Python
python 调用API接口 获取和解析 Json数据
2020/09/28 Python
详解HTML5中ol标签的用法
2015/09/08 HTML / CSS
使用PDF.JS插件在HTML中预览PDF文件的方法
2018/08/29 HTML / CSS
体育系毕业生求职自荐信
2014/04/16 职场文书
大学生自荐材料范文
2014/12/30 职场文书
委托书范本格式
2019/04/18 职场文书