分页: 1 / 1

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

发表于 : 2019年07月13日 11:03
paktc
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; }