标题: [原创代码] Perl批量替换含有utf8代码(比如%5B%5D)的文件名 [打印本页]
作者: 523066680 时间: 2014-8-10 22:47 标题: Perl批量替换含有utf8代码(比如%5B%5D)的文件名
这标题真不好起。
有时候网上下的文件一堆%符号,部分字符被转为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 │
──────────────────────────────────┘
作者: 523066680 时间: 2014-8-10 23:16
补充:
这本来呢 uri_unescape($str); 可以直接转换,即使是穿插有其他字符的也不会出错。
比如 %5bTEST%5d,能够转换为 [TEST] 。 但是不排除有 "测试%e4%b8%ad" 这
种考验严谨程度的UTF8和GBK共存情况,所以还是做了截断,逐个处理……
作者: CrLf 时间: 2014-8-10 23:36
有将 utf-8 乱码文件名转为正常文件名的现成 perl 吗?
convmv 没找到源码,不然就简单了
作者: 523066680 时间: 2014-8-11 00:16
回复 3# CrLf
什么情况?举个栗子。
作者: 523066680 时间: 2014-8-11 00:36
本帖最后由 523066680 于 2014-8-11 00:40 编辑
回复 3# CrLf
你是说utf-8编码流的汉字作为文件名的时候,系统按GBK编码解读,然后看起来乱码的问题是不?
(以下脚本保存为GBK编码文件)- use Encode;
- $str="./甯哥敤ARM鎸囦护闆嗗強姹囩紪.pdf";
- print encode('gbk', decode('utf8', $str));
- <STDIN>;
复制代码
输出结果:
./常用ARM指令集及汇编.pdf
上面的文件名是从这里参考的 http://blog.163.com/yaning_softw ... 721201171114221611/
他页面上粘贴的某些文件字符成了?,有丢失。 其他情况就不太清楚了
作者: CrLf 时间: 2014-8-11 00:54
回复 5# 523066680
卧槽,可以这么短...
谢谢,我改来用~
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |