Question

Étant donné un répertoire de noms de fichiers comprenant des deux octets / numéros pleine largeur et des espaces (avec quelques chiffres demi-largeur et soulignement), comment puis-je convertir tous les chiffres et des espaces à caractères octet?

Par exemple, ce nom de fichier est constitué 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 changer à tous un seul octet comme ceci:

2 2_3.ext

J'ai essayé convmv pour convertir UTF8 à ascii, mais ce qui suit un message apparaît pour tous les fichiers:

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

Était-ce utile?

La solution 3

Merci pour vos réponses rapides, bmargulies et bobince. J'ai trouvé un module Perl, Unicode :: japonais , qui a contribué à faire le travail. Voici un script bash j'ai fait (avec l'aide de cet exemple ) 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

Autres conseils

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.

Quels sont les outils dont vous disposez? 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)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top