本帖最后由 523066680 于 2014-8-15 11:57 编辑
- #此脚本保存为GBK/ANSI格式
- #使用前请确保 控制面板中输入语言为:中文
- use Encode;
- use Win32::Clipboard;
- my $clip;
-
- $clip = Win32::Clipboard();
-
- my @arr;
- my @new_arr;
- my $max=0;
- @arr = split(/\r?\n/, $clip->GetText());
-
- foreach (@arr) {
- chomp;
- s/\t/ /g;
- $max=length($_) if (length($_) > $max);
- }
-
- $max++ if (($max % 2) == 1);
- $form = $max / 2 + 1;
-
- push (@new_arr, "─"x($form) ."┐");
- foreach (@arr) {
- push (
- @new_arr,
- sprintf(" %-${max}s │", $_)
- );
- }
- push (@new_arr, "─"x($form) ."┘");
- $clip->Set(join("\r\n", @new_arr));
- print "已经修改剪切板";
复制代码 复制一段文本,执行代码->代码对文本进行处理,加上外框后重新写到剪切板
效果如下:
───────────────────────┐
#此脚本保存为GBK/ANSI格式 │
#使用前请确保 控制面板中输入语言为:中文 │
use Encode; │
use Win32::Clipboard; │
my $clip; │
│
$clip = Win32::Clipboard(); │
│
my @arr; │
my @new_arr; │
my $max=0; │
@arr = split(/\r?\n/, $clip->GetText()); │
│
foreach (@arr) { │
chomp; │
s/\t/ /g; │
$max=length($_) if (length($_) > $max); │
} │
│
$max++ if (($max % 2) == 1); │
$form = $max / 2 + 1; │
│
push (@new_arr, "─"x($form) ."┐"); │
foreach (@arr) { │
push ( │
@new_arr, │
sprintf(" %-${max}s │", $_) │
); │
} │
push (@new_arr, "─"x($form) ."┘"); │
$clip->Set(join("\r\n", @new_arr)); │
print "已经修改剪切板"; │
───────────────────────┘
如果控制面板中的默认输入法语言不是中文,在写入剪切板的时候会出现乱码问题
参考1:
http://bbs.csdn.net/topics/70214516
参考2:
http://bbs.csdn.net/topics/80362400
lanphaday
赖勇浩
────────────────────────────────┐
会这样的原因是当复制到剪贴板的时候那个程序使用的不是中文输入 │
法,那么复制的时候就会以英文(一般情况下)编码,再复制回来的 │
时候,内码已经变了,自然成了乱码。UE能正确显示是因为它自动兼 │
容多种中文内码。解决方式如下:1,你可以把中文输入法设置为默认 │
的输入法,再运行你的代码,肯定不会乱码的,但这种方法太笨了, │
不可能要求客户这样的嘛,对不对?所以要看方法2,这个方法仅作为 │
测试之用,测试成功,记得给分。2,根据上面的情况,可以只要是中 │
文输入法环境下复制中文就没有问题,那么我们可以调用API把输入法 │
选择为中文输入法(任一皆可,拼音五笔都没有问题)。复制之后再 │
用API设置为原来的输入法。Copy到某一程序的时候,那个程序可以是 │
任意输入法的。这两三个API为IME开头的什么keyboardlayout的函数 │
,你google一下,找到这样的函数名再去MSDN看看用法,很快就解决 │
了。 │
────────────────────────────────┘
|