di Sergej (pionono@gmail.com)
Introduzione
Il problema del charset (ovvero del set di caratteri utilizzato da un sistema operativo, o da un programma) è molto diffuso.
Un esempio? Prendete dalla partizione di Windows (se ne avete una! N.d.felipe) un file che ha nel nome una lettera accentata: è molto probabile che su Linux questo accento non si veda, o appaia al suo posto un punto interrogativo. Questa è una situazione molto comune quando si scaricano file da internet… Beh, su Linux esiste una soluzione, diversa dal correggere a mano ogni singolo file: convmv.
Convmv è un programma da linea di comando (che quindi dovrete eseguire dal terminale) che è in grado di cambiare il charset del nome dei file e delle directory (solo del nome! non il contenuto). Il suo utilizzo è molto semplice. Di seguito vedremo come installarlo e utilizzarlo.
Installazione
Convmv è di solito presente nei repository delle distribuzioni Linux (o almeno lo è su Ubuntu, Debian e Mandriva, per quello che ne so io). Sarà quindi possibile installarlo utilizzando il gestore di pacchetti (Synaptic su Ubuntu e Debian), cercando tramite il motore di ricerca “convmv” (e così per gli altri gestori di pacchetti delle altre distribuzioni).
Sarà ovviamente possibile installarlo utilizzando i comandi da linea di comando.
Se avete bisogno del codice sorgente, ecco l’indirizzo del sito: http://j3e.de/linux/convmv/
Funzioni di base
Convmv ha una logica di funzionamento molto semplice: occorre indicare il charset attuale del nome del file, il charset che volete acquisisca il file e, ovviamente, il nome del file o della directory. Ecco quindi la sintassi del comando:
$: convmv -f charsetorigine -t charsetuscita nomefile
Dove “charsetorigine” è il charset originale del nome del file, mentre “charsetuscita” indica il charset che deve acquisire il nome del file. I file che provengono da Windows di solito hanno charset “latin1”, quindi nell’esempio useremo questo. Se usate ubuntu e non avete fatto particolari operazioni, il charset usato dal vostro sistema dovrebbe essere “utf8”.
Se volete scoprire quale è il charset in uso nel vostro sistema, date sul terminale il seguente comando:
$: echo $LANG
Detto ciò, vediamo in pratica come potrebbe essere l’utilizzo di convmv:
$: convmv -f latin1 -t utf8 nomefile.txt
Se eseguite il comando così come scritto, il programma si limiterà a farvi vedere come cambierebbe il nome del file, senza modificarlo. Se volete effettivamente modificare il nome del file (attenzione che poi non si può tornare indietro!) allora dovete aggiungere il parametro “–notest”. Ecco quindi il comando completo per modificare il charset (inserisco anche dei charset di esempio):
$: convmv -f latin1 -t utf8 --notest nomefile.txt
Altri parametri utili
- –list Restituisce tutti i charset disponibili nel sistema.
$: convmv --list
- -r Applica le modifiche indicate in modo ricorsivo attraverso una directory. Se quindi vogliamo cambiare il charset a tutti i file presenti in una directory, in modo ricorsivo, dovremo dare il comando:
$: convmv -r --notest -f latin1 -t utf8 nomedirectory
- –upper , –lower Trasforma in uppercase (tutte maiuscole) o lowercase (tutte minuscole) le lettere del nome de(i) file cui viene applicato il comando.Ecco un esempio:
$: convmv --notest --lower -f latin1 -t utf8 NomeFile.txt
- -i Modalità interattiva: verrà chiesto per ogni file se volete applicare la modifica.
Conclusioni
Quelle esposte sono le opzioni principali per utilizzare questo utilissimo programma.
Se volete ulteriori informazioni, rimane il comando universale ;)
$: man convmv
Grazie!
ancora non l’ho provato, sono al lavoro dove, x ora :-), sono costretto a usare windoze, ma mi hai dato una bella dritta verso cui andare per un problema che mi (o ci ?) perseguita da quando uso linux come desktop, ormai 5 anni….
Dopo la prova ri-posto i risultati ottenuti su 150 GB di film !!!
@l’autore, traducilo in inglese, e mandalo a http://debaday.debian.net/
il tuo articolo non è male.
è parecchio utile quell’affare…
non ti dico i casini per i file salvati nel piccì dell’universita (nomi e accentare francesi) e il mio sistema, banalmente, UTF8
tradurlo in inglese?? mh, ci provo.
E’ un po’ impolverato il mio inglese, ma forse una cosa così riesco a tradurla ;)
Sergej
Non basterebbe montare il filesystem con l’opzione nls=utf8?
Cioè:
mount -t ntfs /dev/hda1 /mnt -o nls=utf8
Boh..
Forse.
E se scarichi file da internet? Non so se ti sia capitato, ma molto spesso decomprimi archivi e i file hanno problemi di charset…
Sergej
Ciao, io sinceramente mi sono fuso per capirci qualcosa con questi maledetti charset!
Ho una kubuntu dapper, fino alla breezy si poteva agevolmente cambiare il charset del sistema con
sudo dpkg-reconfigure
ma ora non è più possibile…
al lavoro abbiamo una rete mista linux/windows e file scambiati in rete vengono incasinati appunto per problemi di charset diversi…
Se io volessi settare il charset ad ISO8859 1 anzichè UTF8 come devo fare?
PS perchè kubuntu (non so le altre distro) hanno scelto utf8?
che vantaggi da?
Guarda, i vantaggi ci sono. Il problmea è che il “mondo” dei charset è veramente incasinato. Io trovo problemi spesso con i tag dei file mp3 o ogg. A volte beep-media-player mi dice che ci sono problemi con utf8, a volte no.
Perchè se il software che usi per scrivere i tag non supporta utf8, è un casino.
E sorvolo sul versante creazione siti, database, etc…
Sono dell’idea che l’unico modo per uscirne vivi è usare sempre lo stesso charset e trovare i software che lo supportano al meglio :-/
Sergej
>Sono dell’idea che l’unico modo per uscirne vivi è usare sempre lo stesso charset e
>trovare i software che lo supportano al meglio :-/
io sto provando a migrare tutto su UTF.
non è che voi sapete se esiste un prog che fa come convmv ma con semplici file di testo ( htm e php )
Bello bello.
Ma come faccio se ho migliaia di files da rinominare?
>Sono dell’idea che l’unico modo per uscirne vivi è usare sempre lo stesso charset e
>trovare i software che lo supportano al meglio :-/
infatti al lavoro da me abbiamo scelto ISO8859 1 solo che quelli che hanno una kubuntu post breezy hanno come charset utf8… :-(
Mi sarebbe molto utile se qualcuno mi sapesse spiegare come si fa a cambiare il charset… un aiutino ad un noob in periodo natalizio è considerata opera buona! :-)
@Roy Ayers
qui entra in gioco il fantastico mondo della shelll :) puoi fare pressappoco cosi’:
1) apri terminale
2) digita:
for file in `ls DIRECTORY`; do convmv -f latin1 -t utf8 –notest $file ; done
NB 1: fai una prova su pochi file
NB 2: i file sui quali lavorerai sono tutti quelli che “acchiappi” con ls DIRECTORY, dove
DIRECTORY e’ la tua directory di lavoro
Grazie Roy della dritta,
solo che mi sembra una soluzione locale per una singola dir, e tra l’altro credo che implichi il fatto che il charset iso8859-1 sia installato sul sistema.
Fino alla Kubuntu Breezy facevo
sudo dpkg-reconfigure locales
e potevo così scegliere quali charset scaricare e quali impostare come default…
solo che con la Kubuntu Dapper lo stesso comando si limita a riscaricare i charset già presenti (:-O o almeno credo…)
possibile che non ci sia un modo dalla Kubuntu Dapper in poi per scegliere il charset x tutto il sistema operativo?
…se è così mi sembra un grosso limite!
per tradurre il contenuto di un file qualsiasi da un charset a un altro esiste
iconv circa con gli stessi parametri con l’aggiunta di -o per il file di output che non deve essere lo stesso del file dato in ingresso
Certo, iconv è la soluzione definitiva per convertire i file (il contenuto del file, non solo il nome) da una codifica all’altra… ma, purtroppo, è necessario passargli come parametri sia la codifica di partenza che quella di arrivo…
Il problema è che non è facile capire quale sia la codifica di un file, senza conoscerla a priori.
Esiste il programmino “enca” (Extremely Naive Charset Analyser) che fa qualcosa, ma non funziona nel 100% dei casi…
In una visione un po’ “alla Matrix” mi piacerebbe che il mondo fosse codificato tutto in UTF-8…
LuCa
Ps… ma qualcuno leggerà mai questo mio commento ad un post così vecchio? :)))
@LuCa:
Non so quanto sia “alla Matrix”, ma ci stiamo avviando a quello, o almeno spero.
PS: io leggo *tutti* i commenti ;)
ma puo’ servire a eliminare i caratteri strani (:, *, | )
dai nomi di file che devono essere copiati su fs vfat ?
grazie
rename ‘|’ ‘-‘ *