失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Oracle使用json后乱码 nodejs读取本地中文json文件出现乱码解决方法

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

时间:2022-02-06 20:24:12

相关推荐

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

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

Per"fs.readFileSync(filename, 'utf8') doesn't strip BOM markers #1918",fs.readFileis

working as designed:BOM isnotstripped 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/, '');per/joyent/node/issues/1918#issuecomment-2480359

Transform the incoming stream to remove the BOM header with the NPM modulebomstripper/joyent/node/issues/1918#issuecomment-38491548

What you are getting is the byte order mark header (BOM) of the UTF-8 file. WhenJSON.parsesees

this, it gives an syntax error (read: "unexpected character" error). You must strip the byte order mark from the file before passing it toJSON.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格式,否则里面的中文会乱码

functionreadFile(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如下:

variconv=require('iconv-lite');

varfs=require('fs');

varfileStr=fs.readFileSync('D:\\test.csv',{encoding:'binary'});

varbuf=newBuffer(fileStr,'binary');

varstr=iconv.decode(buf,'GBK');

console.log(str);

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

如果觉得《Oracle使用json后乱码 nodejs读取本地中文json文件出现乱码解决方法》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。