Ein Relikt aus alten Zeiten ist, dass man anstatt UTF-8 einen platzsparenden Zeichensatz wie ISO-8859-15 aka Latin1 eingesetzt hat. Heute ist oftmals UTF-8 die Anforderung, so dass man die Dateien nach UTF-8 konvertieren muss.
Das Problem ist, dass die Dateien oftmals unterschiedliche Zeichensätze besitzen. Siehe in folgendem Beispiel ISO-8859 text und Non-ISO extended-ASCII text:
# for file in *.html ; do file $file; done
2003April.html: HTML document, ISO-8859 text, with very long lines
2003August.html: HTML document, ISO-8859 text, with very long lines
2003Juli.html: HTML document, ISO-8859 text, with very long lines
2003Juni.html: HTML document, ISO-8859 text, with very long lines
2003Maerz.html: HTML document, Non-ISO extended-ASCII text, with very long lines
Das oftmals vorgeschlagene Linux Tool iconv hat hiermit Probleme, da man explizit den Ausgangszeichensatz angeben muss. Stimmt dieser nicht überein, gibt es folgende Fehler:
# for file in *.html; do iconv -t ISO-8859-15 -t UTF-8 $file -o $file; done; iconv: illegal input sequence at position 278
iconv: illegal input sequence at position 287
iconv: illegal input sequence at position 279
iconv: illegal input sequence at position 269
iconv: illegal input sequence at position 269
iconv: illegal input sequence at position 276
iconv: illegal input sequence at position 288
iconv: illegal input sequence at position 290
Eine bessere alternative ist vim, da hier nur das Zielformat angegeben werden muss. Der Trick ist, dass man vim in den "Bash-Modus" versetzen muss:
for file in *.html; do vim +"set nobomb | set fenc=utf8 | x" $file ; done;