[Perl]Prima 获取剪切板文本 - Unicode 形式

There's more than one way to do it!
https://metacpan.org http://perlmonks.org
头像
paktc
渐入佳境
渐入佳境
帖子: 59
注册时间: 2016年07月21日 20:34
拥有现金: 锁定
储蓄: 锁定
Has thanked: 7 times
Been thanked: 9 times
联系:

[Perl]Prima 获取剪切板文本 - Unicode 形式

帖子 #1 paktc » 2019年07月13日 11:03

Win32::Clipboard 模块,只能获取 GBK 格式的文本,要获取 Unicode 字符会出乱子,还得看输入法的设置情况。
但是 Prima 提供的剪切板操作,则支持 UTF8 参数(实质得到的是 UNICODE 编码字符)

以下代码循环等待剪切板信息,直到出现匹配的数据后开始获取并保存到新建文本。

=info
改用 prima
V2 \r\r\n 0d 0d 0a 问题
=cut

use utf8;
use Encode;
use File::Slurp;
use Time::HiRes 'sleep';
use Data::Format;
use Prima 'Application';
use Modern::Perl;
STDOUT->autoflush(1);

my $clip = $::application->Clipboard;
my $prev = "prev";

while (1)
{
my $text = wait_clipboard( $prev );
create_textfile($text);
$prev = $text;
sleep 1.0;
}

sub create_textfile
{
my ($text) = @_;
my ($ordernum) = $text =~ /No: (\d+)/;
my ($country) = $text =~/, ([^,\r\n]+)\s+Zip Code:/is;

# Slovakia (Slovak Republic)
my $file = $ordernum . "_". $country . ".txt";
my $all = "\xef\xbb\xbf" . encode('utf8', $text);
$all =~s/\r//g;
write_file($file, $all);
system("start notepad $file");
}

sub wait_clipboard
{
my ($prev) = @_;
my $all;
do
{
$all = $clip->fetch("UTF8");
print ".";
sleep 0.5;
}
until ( defined $all and ($all =~/Contact\sName:/) and ($all ne $prev) );
print "Got it! ";
return $all;
}

回到 “Perl”

在线用户

用户浏览此论坛: 没有注册用户 和 3 访客