2010-01-02 9 views
0

Étant donné un répertoire de noms de fichiers composés de nombres et d'espaces de double octet/pleine largeur (ainsi que des nombres de demi-largeur et de soulignement), comment puis-je convertir? des nombres et des espaces aux caractères à un octet?Convertir des nombres à double octet et des espaces dans les noms de fichiers en ASCII

Par exemple, ce nom de fichier se compose d'un nombre à deux octets, suivi d'un espace à deux octets, suivi de quelques caractères d'un octet:

2 2_3.ext

et je voudrais de changer à tous un seul octet comme ceci:

2 2_3.ext

J'ai essayé convmv convertir UTF8 à ascii, mais le message suivant apparaît pour tous les fichiers:

"ascii ne couvre pas tous les caractères nécessaires pour: nom de fichier"

+0

Vous devez spécifier la langue. Aussi, ce serait une bonne idée de spécifier pourquoi voulez-vous faire cela, cela n'a pas beaucoup de sens car vous aurez toujours d'autres caractères Unicode qui ne peuvent pas être convertis en 'ASCII'. – sorin

+0

* "cela n'a pas beaucoup de sens car vous aurez toujours d'autres caractères Unicode qui ne peuvent pas être convertis" * C'est pourquoi j'ai dit "nombres et espaces", pas tous les caractères. J'ai trouvé une solution utilisant Perl qui fonctionnait parfaitement (voir ma réponse ci-dessous). * "Vous devez spécifier la langue." * Il n'y avait également aucune raison de spécifier la langue, car j'aurais été heureux avec une solution de pratiquement n'importe quelle langue. –

Répondre

0

Merci pour vos réponses rapides, bmargulies et bobince. J'ai trouvé un module Perl, Unicode::Japanese, qui a aidé à faire le travail. Voici un script bash j'ai fait (avec l'aide de this example) pour convertir les noms de fichiers dans le répertoire courant de pleine largeur à caractères demi-largeur:

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

Vous devez soit (1) la normalisation de Java 1.6 (java.text.Normalizer), ou (2) ICU, ou (3 (peu probable)) un produit vendu par l'endroit où je travaille.

1

De quels outils disposez-vous? Il existe des fonctions de normalisation Unicode dans plusieurs langages de script, par exemple en Python:

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