将500多个文件的名称从Unicode U + 0600转换为Text

时间:2013-12-22 11:40:53

标签: perl unicode ssh centos

由于压缩文件t从服务器移动到另一个很多次,大量图像的名称已更改..从文本到Unicode U + 0600 ...这是阿拉伯语BTW

这是一个示例

#U062a#U0637#U0628#U064a#U0642#U0627#U062a-#U0645#U062c#U0627#U0646#U064a#U0629-#U0644#U0644#U062a#U0644#U0648#U064a#U0646.jpg

我用这个工具转换它http://www.branah.com/unicode-converter 我不得不删除“#”。

问题是有超过500个文件。可能高达1000。 我正在使用WordPress,所有文件都在服务器上。

有没有转换它们? 可能使用PHP或任何脚本。


更新01:

我找到了这个有用的工具,因为我使用的是CentOs: 它被称为convmv

以下是该工具的链接:https://www.j3e.de/linux/convmv/

这是一个Perl脚本。 以下是其命令列表:https://www.j3e.de/linux/convmv/man/

问题仍然是我不知道从何而来......

有没有人有这方面的经验?


更新02:尝试运行Kenosis提供的脚本

我首先运行脚本来测试它:

# perl -wc perl_script.pl
perl_script.pl syntax OK

我没有检查语法就运行了脚本:

# perl -w perl_script.pl
Testing: #U0627#U0644#U0623#U064a#U0628#U0627#U062f-Air-150x150.png -> lfybd-Air
-150x150.png
Testing: #U0627#U0644#U0623#U064a#U0628#U0627#U062f-Air-244x300.png -> lfybd-Air
-244x300.png
Testing: #U0627#U0644#U0623#U064a#U0628#U0627#U062f-Air-332x190.png -> lfybd-Air
-332x190.png
Testing: #U0627#U0644#U0623#U064a#U0628#U0627#U062f-Air-518x400.png -> lfybd-Air
-518x400.png
Testing: #U0627#U0644#U0623#U064a#U0628#U0627#U062f-Air.png -> lfybd-Air.png
File 'perl_script.pl' not in convertible format!
Done!

非常感谢您的帮助。感谢

2 个答案:

答案 0 :(得分:3)

也许以下内容会有所帮助:

use strict;
use warnings;
use open qw(:std :utf8);

my $rename = 0;

for my $oldFileName (<*>) {
    my $newFileName = $oldFileName;
    $newFileName =~ s/#U([a-f0-9]+)([^#]+)?/chr( hex $1 ) . ( $2 ? $2 : '' )/gei;

    if ( $newFileName eq $oldFileName ) {
        warn "File '$oldFileName' not in convertible format!\n";
        next;
    }

    if ( -e $newFileName ) {
        warn "File '$newFileName' already exists!\n";
        next;
    }

    print $rename ? 'Renaming: ' : 'Testing: ';
    print "$oldFileName -> $newFileName\n";
    rename $oldFileName, $newFileName if $rename;
}

print "Done!\n\n";

首先在测试或备份目录上运行

将脚本放入需要重命名文件的目录中,然后按如下方式调用它:

perl script.pl

该脚本将读入所有文件名。子例程将名称转换为Unicode,然后使用模块Text::Unidecode将其解码为ASCII。如果文件名不是可转换格式或者已经存在,则warn为{安全原因。

默认情况下,$rename设置为零(false),因此您可以执行非侵入式运行以查看重命名结果。将$rename设置为1或将非零值设置为实际重命名。

希望这有帮助!

答案 1 :(得分:1)

参考this answer。使用这个简单的功能:

<?php
    function uni2arabic($uni_str) 
    {   
          for($i=0; $i<strlen($uni_str); $i+=4)
             {
                    $new="&#x".substr($uni_str,$i,4).";"; 
                    $txt = html_entity_decode("$new", ENT_COMPAT, "UTF-8");
                    $All.=$txt;
             }

        return $All;
    }
?>

然后,您可以在所有文件上使用foreach循环,它会将unicode转换为阿拉伯语文本。