ICONV: CONVERTIRE L'ENCODING DI UN DOCUMENTO XML

La codifica UTF-8 è ormai una codifica molto diffusa nel web, soprattutto in quei contesti in cui si ha a che fare con lingue diverse e con caratteri diversi (latini, cinesi, arabi...). Per garantire la corretta visualizzazione di caratteri appartenenti a linguaggi diversi all'interno di uno stesso documento XML (come pure di una pagina web), è necessario che il documento stesso sia codificato UTF-8. In un contesto eterogeneo, è possibile però che esistano documento con diversi encoding: da qui la necessità di convertire tali documenti, in modo da avere un repository XML interamente UTF-8.

Linux mette a disposizione il comando iconv, che richiede in input il documento, la codifica sorgente e quella target e restituisce il file XML convertito. L'unico problema è che questo comando non modifica l'intestazione dei files XML, perciò il nome della codifica usata va modificato manualmente, oppure col comando sed (non è l'unica soluzione, ad esempio si può usare awk).

Il seguente script prende tutti i files XML nidificati nella directory corrente: supponendo che siano tutti codificati ISO-8859-1, li trasforma in UTF-8:

# all XML files
LIST=`find . -name "*.xml"`

# scan files
for file in $LIST; do
    iconv -c -f ISO-8859-1 -t UTF-8 $file -o $file."utf8"
    if [ "$?" -ne 0 ]; then
        echo Comando fallito $file
    else
        mv $file."utf8" $file
        sed "s/ISO-8859-1/utf-8/g" $file > tmp
        mv tmp $file
    fi
done