Electron在clipboard读取文件这块的API不够清晰,之前针对windows和mac分别采用以下两种方法:
// windows
const rawFilePath = clipboard.read('FileNameW');
let filePath = rawFilePath.replace(new RegExp(String.fromCharCode(0), 'g'), '');
// mac
filePath = clipboard.read('public.file-url').replace('file://', '');
mac没有什么问题,windows在读取含有中文名称时,路径格式会有问题。解决方法参考issue:
https://github.com/electron/electron/issues/12141
const rawFilePath = clipboard.readBuffer('FileNameW').toString('ucs2');
let filePath = rawFilePath.replace(new RegExp(String.fromCharCode(0), 'g'), '');
注意,rawFilePath默认最后会有\u0000
,需要将其剔除;
网友评论