如何让 Perl 的剪贴板模块将 utf-8 正确写入剪贴板?

  • 本文关键字:剪贴板 utf-8 模块 Perl perl utf-8
  • 更新时间 :
  • 英文 :


运行此脚本(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

最新更新