Domanda

Dato un elenco di nomi di file composti da due byte / numeri e spazi a larghezza intera (insieme con alcuni numeri mezza larghezza e underscore), come posso convertire tutti i numeri e spazi a caratteri a singolo byte?

Ad esempio, il nome del file è costituito da un numero doppio byte, seguito da uno spazio doppio byte, seguito da alcuni caratteri singolo byte:

2 2_3.ext

e mi piacerebbe cambiare a tutti singolo byte in questo modo:

2 2_3.ext

Ho provato convmv convertire da utf8 in ASCII, ma il seguente Viene visualizzato un messaggio per tutti i file:

"ascii non copre tutti i caratteri necessari per: filename "

È stato utile?

Soluzione 3

Grazie per le vostre risposte veloci, bmargulies e bobince. Ho trovato un modulo Perl, Unicode :: giapponese , che ha aiutato ottenere il lavoro fatto. Ecco uno script bash che ho fatto (con l'aiuto di questo esempio ) per convertire i nomi dei file nella directory corrente da tutta larghezza a caratteri ridotti:

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

Altri suggerimenti

È necessario o (1) normalizzazione da Java 1.6 (java.text.Normalizer), o (2) ICU , o (3 (improbabile)) un prodotto venduto dal posto lavoro.

Quali strumenti che avete a disposizione? Ci sono funzioni di normalizzazione Unicode in diverse lingue di scripting, ad esempio in Python:

for child in os.listdir(u'.'):
    normal= unicodedata.normalize('NFKC', child)
    if normal!=child:
        os.rename(child, normal)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top