Unicode 将文件名中的双字节数字和空格转换为ASCII

Unicode 将文件名中的双字节数字和空格转换为ASCII,unicode,ascii,double-byte,Unicode,Ascii,Double Byte,给定由双字节/全宽数字和空格(以及一些半宽数字和下划线)组成的文件名目录,如何将所有数字和空格转换为单字节字符 例如,此文件名包含一个双字节数字,后跟一个双字节空格,后跟一些单字节字符: #!/bin/bash for file in *;do newfile=$(echo $file | perl -MUnicode::Japanese -e'print Unicode::Japanese->new(<>)->z2h->get;') test "$file" !=

给定由双字节/全宽数字和空格(以及一些半宽数字和下划线)组成的文件名目录,如何将所有数字和空格转换为单字节字符

例如,此文件名包含一个双字节数字,后跟一个双字节空格,后跟一些单字节字符:

#!/bin/bash
for file in *;do
newfile=$(echo $file | perl -MUnicode::Japanese -e'print Unicode::Japanese->new(<>)->z2h->get;')
test "$file" != "$newfile" && mv "$file" "$newfile"
done
2 2_3 .ext

我想把它改成所有的单字节,如下所示:

2_3.ext

我尝试将utf8转换为ascii,但所有文件都会显示以下消息:


“ascii不包括:filename所需的所有字符”

您需要(1)来自Java1.6的规范化(
Java.text.Normalizer
),或者(2),或者(3(不太可能))我工作的地方销售的产品。

您需要(1)来自Java1.6的规范化(
Java.text.Normalizer
),或者(2),或者(3(不太可能))我工作的地方出售的产品。

你有什么工具?几种脚本语言中都有Unicode规范化函数,例如Python:

for child in os.listdir(u'.'):
    normal= unicodedata.normalize('NFKC', child)
    if normal!=child:
        os.rename(child, normal)

你有什么可用的工具?几种脚本语言中都有Unicode规范化函数,例如Python:

for child in os.listdir(u'.'):
    normal= unicodedata.normalize('NFKC', child)
    if normal!=child:
        os.rename(child, normal)

感谢您的快速回复,B先生和B先生。我发现了一个Perl模块,它帮助完成了工作。下面是我制作的一个bash脚本(在的帮助下),用于将当前目录中的文件名从全宽字符转换为半宽字符:

#!/bin/bash
for file in *;do
newfile=$(echo $file | perl -MUnicode::Japanese -e'print Unicode::Japanese->new(<>)->z2h->get;')
test "$file" != "$newfile" && mv "$file" "$newfile"
done
#/bin/bash
以*存档;做
newfile=$(echo$file | perl-MUnicode::Japanese-e'print Unicode::Japanese->new()->z2h->get;)
测试“$file”!=$newfile“&&mv”$file“$newfile”
完成

感谢您的快速回复,b马格里斯和博宾斯。我发现了一个Perl模块,它帮助完成了工作。下面是我制作的一个bash脚本(在的帮助下),用于将当前目录中的文件名从全宽字符转换为半宽字符:

#!/bin/bash
for file in *;do
newfile=$(echo $file | perl -MUnicode::Japanese -e'print Unicode::Japanese->new(<>)->z2h->get;')
test "$file" != "$newfile" && mv "$file" "$newfile"
done
#/bin/bash
以*存档;做
newfile=$(echo$file | perl-MUnicode::Japanese-e'print Unicode::Japanese->new()->z2h->get;)
测试“$file”!=$newfile“&&mv”$file“$newfile”
完成

您应该指定语言。另外,最好指定您为什么要这样做,这没有多大意义,因为您仍然有其他无法转换为
ASCII
“这没有多大意义,因为您仍然有其他无法转换的Unicode字符”这就是为什么我说“数字和空格”,不是所有的角色。我发现了一个使用Perl的解决方案,效果非常好(见下面的答案)。“您应该指定语言。”也没有理由指定语言,因为我会很高兴从几乎任何语言中找到解决方案。您应该指定语言。另外,最好指定您为什么要这样做,这没有多大意义,因为您仍然有其他无法转换为
ASCII
“这没有多大意义,因为您仍然有其他无法转换的Unicode字符”这就是为什么我说“数字和空格”,不是所有的角色。我发现了一个使用Perl的解决方案,效果非常好(见下面的答案)。“您应该指定语言。”也没有理由指定语言,因为我会很高兴从几乎任何语言中找到解决方案。