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

There's more than one way to do it!
https://metacpan.org http://perlmonks.org
回复
头像
paktc
出类拔萃
出类拔萃
帖子: 65
注册时间: 2016年07月21日 20:34
联系:

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

帖子 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; }
回复

在线用户

正浏览此版面之用户: 没有注册用户 和 0 访客