最新有個需求,想在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實現複製任意文字到剪貼簿