运行此脚本(OSX 10.14(:
use utf8;
use Clipboard;
$mystring = "Willkommen, bienvenue, أهلا, שלום, welcome";
Clipboard->copy($mystring);
将以下字符串放入剪贴板:
Willkommen, bienvenue, أهلا, שלום, welcome
什么魔法能使它正确?
顺便说一下,Clipboard->paste()
在上面的片段之后立即正确地取回了我的原始字符串。作为一种变通方法,我使用这个:
open(CLIPBOARD, "|pbcopy");
print CLIPBOARD $mystring;
close(CLIPBOARD);
它工作得很好,但当然很笨拙,每次都会产生额外的过程。
在Mac操作系统上,剪贴板使用Clipboard::MacPasteboard执行复制操作。后一个模块使用Mac::粘贴板。该模块使用以下代码(请参见第167行(,至少在我的macOS 10.15.5机器上是这样:
open my $fh, '|-', 'pbcopy' or croak "Unable to open pipe to pbcopy: $!";
print { $fh } $data;
close $fh;
将字符串复制到剪贴板。但是文件句柄$fh
没有启用UTF-8层。如果我加上:
binmode $fh, 'encoding(utf-8)';
在print
语句之前,它在这里运行良好。在macOS Catalina 10.15.5上测试。
由于Clipboard
只是调用Mac::Pasteboard
,而后者有更多的选项来编码剪贴板的内容,因此我建议您改用Mac::Pasteboard
。