Windows平臺Node.js實現複製任意文字到剪貼簿

剪影Boy發表於2018-01-18

最新有個需求,想在Windows平臺上用Node.js實現複製功能,實現過程中踩了一些坑,總結一下,做個記錄。

首先,這個需求顯然很小,也不用考慮跨平臺,就打算自己實現一下。Node.js本身並沒有類似函式,而CMD命令,應該是有類似實現的:

echo biebuxin | clip
複製程式碼

Node.js程式碼可以這麼寫:

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

exec('echo biebuxin | clip');
複製程式碼

預期結果應該是biebuxin這個字串被複制到剪貼簿了。貼上後卻發現,複製的不止biebuxin,後面多了一個空格和換行。

不想要後面多餘的空格和換行,怎麼辦?換一種寫法:

exec('clip').stdin.end('biebuxin');
複製程式碼

這樣貼上出來的,不多不少,就是biebuxin。

你以為就結束了麼?Naive...

當你想要複製中文時,比如:

exec('clip').stdin.end('別不信');
複製程式碼

貼上出來,會發現是亂碼!

為什麼會出現亂碼?

是編碼的問題。

在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實現複製任意文字到剪貼簿

相關文章