前端上传的是复gbk, 你后端当成utf8, 当然制这样了.
一种是你前端规定只能上传utf8文本文件;
还有一种你知道前端大部分都是gbk, 后端做gbk到utf8的转化. (我那个时候nodejs似乎还没内置gbk解码器, 现在不知道了)
❷ 为什么nodeJS中函数的返回值是undefined,我已经赋值了啊这个loadfile方法
图看不清楚,一般函数返回一个变量,但获取到这个变量是undefined,可能是变量在内异步函数中赋值,返容回的时候还没有被赋值
loadfile 应该是个异步函数,所以问题很可能出在这里
建议用promise或await
❸ node读取本地文件中文乱码
node读取本地文件
由于Node环境当中不支持GBK编码,此时读到的文件,英文可读取,但中文乱码
node.js当中的Buffer对象支持的编码格式的种类(支持的格式:ascii、utf8、utf16le、ucs2、base64、binary、hex)有限,不支持GBK的编码形式。
解决办法
iconv-lite用于在node当中处理在各种操作系统出现的各种奇特胡销编码,该模块不提供读写文件的操作裤态游,只提供文件编码转换的功能。
npm install iconv-lite
restitle即为txt文档中的中文
此时会出现一个警告
Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding
上面这个github中给出了详细解释,大概意思是说
在使用iconv.decode功能进行解码之前,原始资源(无意间)已经body += chunk通过javascript类型闭备转换进行了解码。
双重解码不仅会导致错误的结果,而且几乎不可能恢复原始字节,因为utf8转换是有损的,因此即使这样做也 iconv.decode(new Buffer(body, 'utf8'), 'win1252') 无济于事。
不是很明白,但有个忽略警告的方法
使用前说明一下忽略警告,就不会报错
❹ nodejs的转发接口遇到的问题
之前在预生产环境遇到过这个问题,h5页面和API部署在不同域名下,访问接口返回销戚值为乱码。
当时的解决办法为放在同一域名下,但是并没有解决根本问题。
现在生产环境公司要求绝对不能放在同一域名下,(一个小伙伴给的解释是抢占资源,我觉得合理)
所以当下问题就来了,搞了两天才弄明白真正原因。
第一,乱码问题
是因为nginx为了节省资源在返回html的灶御时候会自动压缩(不知道记得对不对)
在请求的时候加上 gzip:true 即可。
第二,nginx返回404问题
乱码问题解决了以后,发现nginx返回的亏辩陵结果为404。
原因是headers
是因为此处传给API的headers直接复用了页面给nodejs的headers(req.headers为页面给nodejs的headers)req.headers有个参数为host指向的是h5页面的地址而不是API的地址
(猜测,加上host后nginx会根据host来找调用的API地址,因为不在同一域名下,此时host指向的是页面部署的域名而不是API部署的域名,自然找不到,这也就解释了为什么部署在同一域名时不会出现问题。
本地运行的时候,访问IP地址可以正常返回结果,访问IP对应的域名时404,是因为访问IP时不会通过nginx,所以也不会有问题)
❺ nodejs的net模块获取到数据转成json后,取得的值怎么是乱码
您好: 首先你这样name.a,name.b这种格式去槐唯衡山团得到那个数据,先不说乱铅做码问题,这样本身就应该得不到。因为你得到url的值是...
❻ nodejs buffer tostring怎么返回中文
默认是utf8的编码,可以正常返回中文的,其他编码呀,有相应的库才行。
❼ Nodejs乱码怎么解决
Node.js 支持中文不太好(实际上是Javascript支持),见《Node.js开发指南》。
要想Node.js正常显示中文,需要两点:
1、js文件保存为unicode格式。js文件是否为unicode格式,一个简单的方法是使用记事本来判断。使用记事本打开JS文件,点菜单另存为,看编码格式是否为"UTF-8"。若不是,可使用UltraEdit工具进行转换,使用记事本也可以转换。
2、在js文件中增加编码说明meta数据,让浏览器知道使用什么编码来解释网页。
两个条件缺一不可。
一个Node.js中使用中文的例子如下,该app.js需保存为utf-8格式,同时在文中增加meta编码数据说明:
[javascript]view plain
<metacharset="utf-8"/>
[javascript]view plain
//app.js
varhttp=require('http');
http.createServer(function(req,res){
res.writeHead(200,{'Content-Type':'text/html'});
res.write('<head><metacharset="utf-8"/></head>');
res.write('<h1>Node.js</h1>');
res.write('<b>亲爱的,你慢慢飞,小心前面带刺的玫瑰...</b>');
res.end('<p>HelloWorld</p>');
}).listen(3000);
console.log(".");
❽ nodejs中使用$.get 获取html出现中文乱码
npm install -g nodegrass //安装此模块使用
var gs = require('nodegrass');
gs.get('http://www.jd.com', function(data){
console.log(data);//将data输出即使中文
}, 'gbk').on('error',funtion(err){
console.log(err);
});
可以查查nodegrass的说明 https://github.com/scottkiss/nodegrass
❾ js,nodejs如何判断文件是什么编码格式
nodejs编码只支持utf8的编码方式,无论是打开某个文件或者写.js脚本都得以utf8的编码方式保存,不然程序无法运行,读出来的文件是乱码。
如果是在前台,读取文件是通过FileReader或者FileReaderSync这两个webAPI和input[type='file']标签来配合来完成,但是这个两个API已经包涵了判断文件的编码方式的功能,无论是GBK还是utf8编码的文件都能正确打开不出现乱码,但是nodejs就会出现这样的问题,读取gbk和unicode编码的文件出现奇怪的乱码,有一个模块iconv-lite可以解决搜信编码问题,但是前提是你得知道这个文件的编码方式,举个例子:
有一个gkb的文件叫gbk.txt正确查看它的方式如下:
var icon=require('iconv-lite');
var fs=require('fs'改漏备)
fs.readFile('gbk.txt',function(err,buffer){
var str=iconv.decode(buffer,'gbk')
console.log(str)//得到无乱码的内容
})
但是如果不知道文件的编码方式,那有该怎么办呢?
那就来聊一聊编码方式,首先UNICODE编码,UNICODE编码的文件无论核毁内容是什么,前两个字节要不是FF FE 或者 FE FF,
utf-8头两个字节是EF BB,至于gbk吧,目前我没找到判断方法,只能粗略的判断如果不是unicode和utf8就认为是GBK,
代码如下:
var fs=require('fs')
fs.readFile('code.txt',function(err,buffer){
if(buffer[0]==0xff&&buffer[1]==0xfe){
console.log('unicode')
}else if(buffer[0]==0xfe&&buffer[1]==0xff){
console.log('unicode')
}else if(buffer[0]==0xef&&buffer[1]==0xbb){
console.log('utf8')
}else{
console.log('else')
}
})