正在尝试复制到cp1251中的剪贴板文本。
#!/usr/bin/perl -w
use Clipboard;
use Encode;
my $ClipboardOut = "A bunch of cyrillic characters - а-б-в-г \n";
Encode::from_to($ClipboardOut, 'utf-8', 'cp1251');
Clipboard->copy($ClipboardOut);而不是西里尔字母"?“粘贴在任何Windows应用程序中。如果我删除带有Encode的行-西里尔字母会产生带有不同修饰符的"a'-s:
A bunch of cyrillic characters à-á-â-ã 我想我错过了一些特别简单的东西,但我被它卡住了。有没有人能帮帮我?
发布于 2020-08-11 04:21:03
在Windows中,Clipboard需要使用系统的活动代码页编码的文本。这是因为剪贴板只是Win32::Clipboard的一个包装器。虽然Win32::Clipboard允许您从剪贴板接收任意Unicode文本,但它不允许您在剪贴板上放置任意Unicode文本。因此,直接使用该模块不会有任何帮助。
这是有限制的。例如,我的机器的ACP是cp1252,所以我不能使用这个模块把西里尔字母放在剪贴板上。
假设您的系统的ACP支持有问题的西里尔字符,这里有两个解决方案:(我直接使用Win32::Clipboard,但您也可以以同样的方式使用Clipboard )。
使用UTF-8编码的源代码(这通常是理想的)
use utf8;
use Encode qw( encode );
use Win32 qw( );
use Win32::Clipboard qw( );
# String of decoded text aka Unicode Code Points because of `use utf8;`
my $text_ucp = "а-б-в-г\n";
my $acp = "cp" . Win32::GetACP();
my $clip = Win32::Clipboard();
$clip->Set(encode($acp, $text_ucp));根据活动代码页编码的源代码
Perl希望源代码使用ASCII码(no utf8;,默认值)或UTF8(带有use utf8;)进行编码。然而,当no utf8;生效(默认)时,字符串和正则表达式文本是“8位干净的”,这意味着任何不对应于ASCII码字符的字节都将产生一个与该字节具有相同值的字符。
use Win32::Clipboard qw( );
# Text encoded using source's encoding (because of lack of `use utf8`),
# which is expected to be the Active Code Page.
my $text_acp = "а-б-в-г\n";
my $clip = Win32::Clipboard();
$clip->Set($text_acp);发布于 2020-08-12 01:17:21
找到临时解决方案:脚本用echo blah-blah-blah | clip生成.bat文件,运行后删除。
https://stackoverflow.com/questions/63339626
复制相似问题