Windows平台Node.js实现复制任意文本到剪贴板

最新有个需求,想在Windows平台上用Node.js实现复制功能,实现过程当中踩了一些坑,总结一下,作个记录。javascript

首先,这个需求显然很小,也不用考虑跨平台,就打算本身实现一下。Node.js自己并无相似函数,而CMD命令,应该是有相似实现的:java

echo biebuxin | clip
复制代码

Node.js代码能够这么写:shell

const { exec } = require('child_process');

exec('echo biebuxin | clip');
复制代码

预期结果应该是biebuxin这个字符串被复制到剪贴板了。粘贴后却发现,复制的不止biebuxin,后面多了一个空格和换行。函数

不想要后面多余的空格和换行,怎么办?换一种写法:工具

exec('clip').stdin.end('biebuxin');
复制代码

这样粘贴出来的,很少很多,就是biebuxin。ui

你觉得就结束了么?Naive...编码

当你想要复制中文时,好比:spa

exec('clip').stdin.end('别不信');
复制代码

粘贴出来,会发现是乱码!code

为何会出现乱码?ip

是编码的问题。

在CMD中执行chcp,结果是“活动代码页: 936”。这代表,CMD默认是GBK编码。而Node.js默认是UTF-8编码——这种编码差别,对中文而言,确定会出问题的嘛。

而后尝试把编码改为GBK,却发现,Node.js并不支持GBK编码。

这个时候,得借助iconv-lite这个强大的编码转换工具了,代码以下:

const { exec } = require('child_process');
const iconv = require('iconv-lite');

exec('clip').stdin.end(iconv.encode('别不信', 'gbk'));
复制代码

粘贴出来,完美。

我的技术博客 biebu.xin,原文连接——Windows平台Node.js实现复制任意文本到剪贴板

相关文章
相关标签/搜索