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

时间:2010-01-02 19:37:36

标签: unicode ascii double-byte

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

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

2 2_3.ext

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

2 2_3.ext

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

“ascii未涵盖以下所有必需字符: filename

3 个答案:

答案 0 :(得分:2)

您需要(1)从Java 1.6(java.text.Normalizer)规范化,或(2)ICU,或(3(不太可能))我工作的地方销售的产品。

答案 1 :(得分:1)

您有哪些工具?在几种脚本语言中有Unicode规范化函数,例如在Python中:

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

答案 2 :(得分:0)

感谢您的快速回复,bmargulies和bobince。我找到了一个Perl模块,Unicode::Japanese,帮助完成了工作。这是我创建的一个bash脚本(在this example的帮助下)将当前目录中的文件名从全角字符转换为半角字符:

#!/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