代码实现 解析 window的 lnk文件 得到实际指向的文件.解析的结果中 出现了乱码.
请问如何解决这个乱码?
let ws = require("windows-shortcuts");
var iconv = require("iconv-lite");
const chinese_encoding = "cp936";
const path3 =
"C:/Users/40294/AppData/Roaming/Microsoft/Windows/Recent/说明.txt.lnk";
ws.query(path3, function (err, lnk) {
console.log(err);
console.log(lnk);//乱码
});
依赖
"dependencies": {
"iconv-lite": "^0.6.3",
"win-lnk-parser": "^1.1.2",
"windows-shortcuts": "^0.1.6"
}
输出:
PS D:\program\recentfiles> node b.js
null
{
expanded: {
target: 'D:\\DevTools\\nacos-server-2.2.2\\nacos\\bin\\˵��.txt',
args: '',
workingDir: 'D:\\DevTools\\nacos-server-2.2.2\\nacos\\bin',
icon: ''
},
target: 'D:\\DevTools\\nacos-server-2.2.2\\nacos\\bin\\˵��.txt',
args: '',
workingDir: 'D:\\DevTools\\nacos-server-2.2.2\\nacos\\bin',
runStyle: 1,
icon: '',
iconIndex: '0',
hotkey: 0,
desc: ''
}
尝试的方案:
您遇到的问题是 .lnk
文件中包含的文件路径使用的是非标准编码(可能是 UTF-16LE),而 windows-shortcuts
库在解析 .lnk
文件时没有正确处理这种编码。对于 Windows 快捷方式中的字符串,特别是当它们包含非 ASCII 字符时(如中文字符),通常使用的是 UTF-16LE 编码。
由于 iconv-lite
和直接操作 Buffer
的方法都没有成功,我们可以考虑直接在 windows-shortcuts
或其依赖库中查找是否有相关的配置或补丁来处理这个问题。但是,由于 windows-shortcuts
似乎是一个比较老的库(根据版本号),它可能不包含对 UTF-16LE 编码的内置支持。
作为替代方案,您可以尝试使用其他更现代或更活跃维护的库,如 win-lnk-parser
(尽管您已经列出了它作为依赖,但您实际使用的代码示例中使用的是 windows-shortcuts
)。不过,如果 win-lnk-parser
也不直接支持 UTF-16LE,您可能需要自己实现解析 UTF-16LE 编码字符串的逻辑。
以下是一个使用 Buffer
和 TextDecoder
(Node.js 11+ 中内置)来尝试解析 UTF-16LE 编码字符串的示例(请注意,这只是一个概念性的示例,并且可能需要根据实际的 .lnk
文件格式进行调整):
let ws = require("windows-shortcuts"); // 或者尝试使用 win-lnk-parser
const path3 = "C:/Users/40294/AppData/Roaming/Microsoft/Windows/Recent/说明.txt.lnk";
ws.query(path3, function (err, lnk) {
if (err) {
console.error(err);
return;
}
// 假设 lnk.expanded.target 或 lnk.target 包含的是 UTF-16LE 编码的 Buffer
// 这里需要确认实际的 Buffer 来源和格式
let targetBuffer = Buffer.from(lnk.expanded.target, 'hex'); // 如果不是 hex 格式,则可能需要其他方式获取 Buffer
let decoder = new TextDecoder('utf-16le');
let targetPath = decoder.decode(targetBuffer);
console.log(targetPath); // 应该输出正确的文件路径
});
注意:这个示例假设 lnk.expanded.target
或 lnk.target
是一个以某种方式(可能是十六进制字符串)表示的 Buffer。但是,根据 windows-shortcuts
的文档或实现,这可能并不总是正确的。您需要查看该库的实际输出,并确定如何从它那里获取包含文件路径的原始 Buffer。
如果 windows-shortcuts
不提供这样的 Buffer,或者它内部以某种方式错误地处理了编码,那么您可能需要寻找一个更合适的库,或者自己编写代码来解析 .lnk
文件的二进制结构。这通常涉及对 Windows 快捷方式文件格式的深入了解,这可能会相当复杂。
本文向大家介绍解决nodejs中使用http请求返回值为html时乱码的问题,包括了解决nodejs中使用http请求返回值为html时乱码的问题的使用技巧和注意事项,需要的朋友参考一下 今天用nodejs进行http请求时返回的数据是一个html文件,然后我还是按照以前解析json数据的方法。果不其然报错了:SyntaxError: Unexpected token in JSON at po
由vue-cli3.0创建的vue2.0项目 使用echarts制作3D 饼图时,在main.js中引ecarhts-gl后出现警告 ` import * as echarts from 'echarts' import 'echarts-gl' ` 这是为什么,如何解决这个警告 暂无
引入第三方js跨域问题,如何解决? 项目中引入了“天地图”js库, 但是自己的站点是“https”协议,发布站点后,发现请求的库里面重定向到了“http”开头的地址,导致引入该库报错,导致无法使用天地图, 演示: 访问官方demo:http://lbs.tianditu.gov.cn/api/js4.0/examples.html 打开f12,你能看到都是重定向(307)的http,哪怕你把例子中
本文向大家介绍java中文传值乱码问题的解决方法,包括了java中文传值乱码问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java中文传值乱码问题,以及解决方法,供大家参考,具体内容如下 一般编码格式设置: 1.可以经过两次编码处理,即设置字符集后,在插入前解码字符集,也是最有效的方式 设置字符集: 解码字符集: 2.直接处理: userName = new Stri
本文向大家介绍JSP服务器端和前端出现乱码问题解决方案,包括了JSP服务器端和前端出现乱码问题解决方案的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了JSP服务器端和前端出现乱码问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在前端和服务器端交互的过程中主要是通过HTTP协议进行交互的,而在Servlet接口中有提供一个H
本文向大家介绍SqlServer数据库中文乱码问题解决方法,包括了SqlServer数据库中文乱码问题解决方法的使用技巧和注意事项,需要的朋友参考一下 问题:创建新数据库,存入中文显示乱码??? 原因分析:SQL版的乱码问题还是出现在SQL SERVER的安装设置上。默认安装时系统默认的排序规则是拉丁文的排序规则,但一般人在安装时没有考虑到这一点,安装时只是点取下一步,安装完成后,造成了SQL版在