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观察者模式
Oct 13 NodeJs
nodejs 的 session 简单使用
Jun 06 NodeJs
nodejs服务搭建教程 nodejs访问本地站点文件
Apr 07 NodeJs
nodejs和C语言插入mysql数据库乱码问题的解决方法
Apr 14 NodeJs
Nodejs 和Session 原理及实战技巧小结
Aug 25 NodeJs
用nodejs实现json和jsonp服务的方法
Aug 25 NodeJs
nodejs实现截取上传视频中一帧作为预览图片
Dec 10 NodeJs
Linux Centos7.2下安装nodejs&npm配置全局路径的教程
May 15 NodeJs
基于nodejs的雪碧图制作工具的示例代码
Nov 05 NodeJs
NodeJs实现简单的爬虫功能案例分析
Dec 05 NodeJs
nodejs微信开发之授权登录+获取用户信息
Mar 17 NodeJs
浅谈使用nodejs搭建web服务器的过程
Jul 20 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与SQL注入攻击[二]
2007/04/17 PHP
深入分析php中接口与抽象类的区别
2013/06/08 PHP
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
jquery、js操作checkbox全选反选
2014/03/12 Javascript
js实现宇宙星空背景效果的方法
2015/03/03 Javascript
javascript实现在网页任意处点左键弹出隐藏菜单的方法
2015/05/13 Javascript
探讨JavaScript中的Rest参数和参数默认值
2015/07/29 Javascript
快速学习jQuery插件 Cookie插件使用方法
2015/12/01 Javascript
jQuery Html控件基本操作(日常收集整理)
2016/03/11 Javascript
jQuery控制文本框只能输入数字和字母及使用方法
2016/05/26 Javascript
js 颜色选择插件
2017/01/23 Javascript
通过V8源码看一个关于JS数组排序的诡异问题
2017/08/14 Javascript
Vue 实现从文件中获取文本信息的方法详解
2019/10/16 Javascript
js实现图片无缝循环轮播
2019/10/28 Javascript
[03:55]DOTA2完美大师赛选手传记——LFY.MONET
2017/11/18 DOTA
12步教你理解Python装饰器
2016/02/25 Python
Python编程中NotImplementedError的使用方法
2018/04/21 Python
python3+PyQt5使用数据库窗口视图
2018/04/24 Python
Python对象与引用的介绍
2019/01/24 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
2020/01/15 Python
手把手教你安装Windows版本的Tensorflow
2020/03/26 Python
使用matlab 判断两个矩阵是否相等的实例
2020/05/11 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
2020/05/26 Python
python爬虫线程池案例详解(梨视频短视频爬取)
2021/02/20 Python
印度手工编织服装和家居用品商店:Fabindi
2019/10/07 全球购物
介绍Ibatis的核心类
2013/11/18 面试题
财务部岗位职责
2013/11/19 职场文书
公司员工活动策划方案
2014/08/20 职场文书
房产授权委托书范本
2014/09/22 职场文书
依法行政工作汇报材料
2014/10/28 职场文书
讲座通知范文
2015/04/23 职场文书
廉政承诺书范文
2015/04/28 职场文书
2015年安全生产月工作总结
2015/07/27 职场文书
社区服务活动感想
2015/08/11 职场文书
古诗文之爱国名句(77句)
2019/09/24 职场文书
Mysql数据库索引面试题(程序员基础技能)
2021/05/31 MySQL