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實現複製任意文本到剪貼板

相關文章
相關標籤/搜索