Alle zusammenstellen. Gehen Sie zu dir, erstellen Sie dir2utf8.sh
:
#!/bin/bash
# converting all files in a dir to utf8
for f in *
do
if test -f $f then
echo -e "\nConverting $f"
CHARSET="$(file -bi "$f"|awk -F "=" '{print $2}')"
if [ "$CHARSET" != utf-8 ]; then
iconv -f "$CHARSET" -t utf8 "$f" -o "$f"
fi
else
echo -e "\nSkipping $f - it's a regular file";
fi
done
Vielleicht suchen Sie nach enca
:
Enca ist ein extrem naiver Charset-Analyzer. Es erkennt den Zeichensatz und die Codierung von Textdateien und kann sie auch mithilfe eines integrierten Konverters oder externer Bibliotheken und Tools wie libiconv, librecode oder cstocs in andere Codierungen konvertieren.
Derzeit werden unabhängig von der Sprache Weißrussisch, Bulgarisch, Kroatisch, Tschechisch, Estnisch, Ungarisch, Lettisch, Litauisch, Polnisch, Russisch, Slowakisch, Slowenisch, Ukrainisch, Chinesisch und einige Multibyte-Kodierungen unterstützt.
Beachten Sie, dass die automatische Erkennung der aktuellen Codierung im Allgemeinen ein schwieriger Prozess ist (die gleiche Bytesequenz kann in mehreren Codierungen korrekter Text sein). enca
verwendet Heuristik basierend auf der Sprache, die Sie ihm mitteilen, um es zu erkennen (um die Anzahl der Codierungen zu begrenzen). Sie können enconv
verwenden um Textdateien in eine einzelne Kodierung umzuwandeln.
Sie können das bekommen, was Sie brauchen, indem Sie die Standard-GNU-Utils-Datei und awk verwenden. Beispiel:
file -bi .xsession-errors
gibt mir:"text/plain; charset=us-ascii"
also file -bi .xsession-errors |awk -F "=" '{print $2}'
gibt mir "us-ascii"
Ich verwende es in Skripten wie folgt:
CHARSET="$(file -bi "$i"|awk -F "=" '{print $2}')"
if [ "$CHARSET" != utf-8 ]; then
iconv -f "$CHARSET" -t utf8 "$i" -o outfile
fi