这标题真不好起。
有时候网上下的文件一堆%符号,部分字符被转为UTF8代码的形式,而非明文的形式。
这里写一个批量转换的工具自己用。试了一下没有大BUG,就发上来了。- use utf8;
- use Encode;
- use IO::Handle;
- use URI::Escape;
-
- STDOUT->autoflush(1);
-
- my $name;
- foreach (glob "*") {
- if (
- (-f $_) and ($_ =~ /%[0-9a-fA-F]{2}/)
- ) {
- $name = &utfcode_to_char($_);
- print $_,"\n";
- print " => ", $name, "\n\n";
- rename($_, $name) or warn "$!";
- }
- }
- <STDIN>;
-
- sub utfcode_to_char {
- #传参示例: %e4%b8%adtest[]
- #逐个处理,转换为明文后代入
- my $src = shift;
- my $n=0;
- my $ustr;
- while ($src=~/((%[0-9a-fA-F]{2})+)/) {
- $ustr = decode('utf8', uri_unescape($1));
- $ustr = encode('gbk', $ustr);
- #代入的时候使用GBK
- $src =~s/$1/$ustr/;
- }
- print "未找到需要替换的字串" if (not defined $ustr);
- return $src;
- }
复制代码 示例文件列表:
──────────────────────────────────┐
%5B利伯蒂的远征%5D.%28美%29杰夫·格拉布.文字版.pdf │
%5B彩虹六号:维加斯%5D.Tom_Clancys_Rainbow_Six_Vegas-HATRED-ENG.nfo │
Clipboard WaitForChange.pl │
[文件改名]%UTF8代码转字符V1.0.pl │
[文件改名][批量]%UTF8代码转字符V1.0.pl │
──────────────────────────────────┘
执行结果:
──────────────────────────────────┐
%5B彩虹六号:维加斯%5D.Tom_Clancys_Rainbow_Six_Vegas-HATRED-ENG.nfo │
=> [彩虹六号:维加斯].Tom_Clancys_Rainbow_Six_Vegas-HATRED-ENG.nfo│
│
%5B利伯蒂的远征%5D.%28美%29杰夫·格拉布.文字版.pdf │
=> [利伯蒂的远征].(美)杰夫·格拉布.文字版.pdf │
──────────────────────────────────┘ |