听说了吗?Node.js特别神奇,竟然能玩转服务器上的JavaScript游戏不过,处理带中文文件名的时候,确实挺让人头疼的,毕竟费时又伤心。没关系,我这就来教你应对之道,下次遇到烦心事,就不用这么头疼!
一、问题描述
来,咱们说说怎么搞定Node.js代码中汉字路径和查找文件时的乱码问题,别让这个弄得我们头都大了,实在太耗费精力了!举个真实的例子,你试试用fs.readdir()函数看下某个文件夹,乱七八糟的字符瞬间就把显示屏给占满!哪儿还有我们需要的信息哟~
其实,就是因为那些字儿看着不怎么习惯,怪怪的。告诉你,咱们平时在Windows上用的可是GBK编码,但Node.js玩儿的却是UTF-8来解读路径。要是这中间破译错了,就能整出来好些看不懂的字符乱糟糟的情况!
Error: ENOENT: no such file or directory, scandir 'C:Users妲己Desktop est'
二、原因分析
[ 'C:Users琪亚娜Desktoptest文件夹1', 'C:Users琪亚娜Desktoptest文件夹2', 'C:Users琪亚娜Desktoptest文件夹3' ]
你知道吗?有些时候电脑里的字码不对,原本的汉字就变丑了。像咱们常用的Windows就是用gbk编码的,不过Node.js更喜欢utf-8。这俩码碰到一块儿,汉字就变得糊涂了。
三、解决方法
1.使用iconv-lite库
今儿给你们支个招儿——只需下载一个名叫”Iconv- Lite”的东东,就能解决你看不懂各种混有中英字符路径的困扰。可简单了,you只需要像打字那样敲一句”npm install daemon”即可,当然,学习如何运用fs模块也是很重要滴。装完后记得别忘了加上iconv-lite这个小伙伴从此无论遇到哪种奇怪的路径,心里都不会慌张啦~
2.使用node-chardet库
npm install iconv-lite --save
快来试试这个超级好用的`node-chardet`!只需在 npm 中装载一下,不论是大批量处理文件还是构建新的文件,都不是事儿了。这个小玩意儿就像是武林高手,负责查看文件路径的编码方式,然后悄无声息地将其转化为 utf-8格式,确保你能够顺利访问任何编码类型!
3.使用StringDecoder
const iconv = require('iconv-lite'); const fs = require('fs'); let path = 'C:Users妲己Desktoptest'; // 将路径从gbk编码转换为utf-8编码 path = iconv.decode(Buffer.from(path), 'gbk'); // 读取文件 fs.readFileSync(path);
Node中有个厉害角色叫StringDecoder,它能帮我们将Buffer里的字节翻译成人话。遇到晦涩难懂的中文文件名字,也不用怕,这招儿准能用得上,帮你看清它们的真实面貌!
4.修改Windows系统编码设置
别慌,一般情况下,咱们装的Windows10都是用GBK编码,不过要是发现有乱码,那咱就换个utf-8试试呗。挺简单滴,你先找到“控制面板”里的“时钟和地域”,点开“地域和语言”,看到“管理”就点进去,然后选“系统设置更改语言和地域”。接着就看见“给非Unicode程序使用的语言”了?改成“中文(简体,中国)”就成了!最后重启下电脑,问题就解决了!
npm install chardet --save
要是用Node.js读取不到中文路径?别慌这儿有个简单的法子给你!哪个方法实用就赶紧去试下,这样用Node.js就能轻易地读取中文路径了,开发效率也提高很多,用户也开心!
四、总结与展望
const chardet = require('chardet'); const fs = require('fs'); let path = 'C:Users妲己Desktoptest'; // 检测路径编码 const encoding = chardet.detectFileSync(path); // 将路径从检测出的编码转换为utf-8编码 path = iconv.decode(Buffer.from(path), encoding, 'utf-8'); // 读取文件 fs.readFileSync(path);
这个方法太牛了,解决了Nod.js对中文目录产生乱码的老大难问题!以后再也不要因为文件夹问题而头疼了。以后技术更厉害的话,估计还能学到更多酷炫的技巧,我们程序员就能应付各种烂摊子了,真正做到游刃有余。
Node.js让你有点头疼吗?说出来听听咋应对,咱俩边侃大山边学习下呗。
const { StringDecoder } = require('string_decoder'); const fs = require('fs'); let path = 'C:Users妲己Desktoptest'; // 读取文件 const content = fs.readFileSync(Buffer.from(path)); // 将Buffer对象转换为字符 const decoder = new StringDecoder(); const pathStr = decoder.write(content);
。
评论0