Table of Contents

ISO-8859 to UTF8 Converter

Skript, welches vom mir erstellt wurde, um alte Bullnix Pages (Post-Wiki) automatisiert in das neue UTF-8 Fileformat zu konvertieren! Dies ist besonders wichtig, weil ansonsten Sonderzeichen wie, “ä”,“ö”,“ü” etc.. nicht mehr korrekt dargestellt werden können!

Zu beachten: Das Skript, macht vor dem Konvertieren, jeweils ein Backup der original Dateien. *.backup! Falls es also Probleme gibt, enthalten jene Files den Inhalt der originalen Files!

Skript Sourcecode

Filename: convert_ISO-8859_to_UTF8.sh

#!/bin/bash

cd /data/webhome/bullnix-int.post.ch/pages/foswiki/data/ #Change to YOUR folder, where the files are!!

for file_to_convert in $( find . -type f ); do

        file_encoding=$(file -i "$file_to_convert" | sed "s/.*charset=\(.*\)$/\1/")
        if [  "${file_encoding}" = "iso-8859-1" ] || [ "${file_encoding}" = "iso-8859-2" ];
        then
                cp -v "$file_to_convert" "${file_to_convert}.backup"
                iconv -f ISO-8859-1 -t UTF-8 "${file_to_convert}.backup" > "$file_to_convert"
        else
                echo "File: ${file_to_convert} is already in 'utf8' encoded!"
        fi
done


Fix für nicht konvertierte Inhalte der Dateien

Um zu überprüfen, ob die Konvertierung auch für alle Files erfolgreich durchgelaufen ist, kann folgender Promt gebraucht werden:

# cd /data/webhome/bullnix-int.post.ch/pages/foswiki/data/
# find . -name "*.txt"  | while read F; do cat "$F"  | hexdump -C | cut -b11-60 |  egrep -q "(c4|d6|dc|e4|e7|e8|e9|ea|f4|fc|f6)"; if [ $? -eq 0 ]; then echo "$F : ISO";  fi; done

Falls dieser Befehl nun Fehler ausgibt, kann folgendes Skript verwendet werden um diese zu korrigieren.

Filename: fix_convertig_errors.sh

#!/bin/bash

cd /data/webhome/bullnix-int.post.ch/pages/foswiki/data/

for file_to_fix in $( find . -name "*.*" ); do

        #Detect ISO encodings in files via hexdump:
        cat "$file_to_fix"  | hexdump -C | cut -b11-60 |  egrep -q "(c4|d6|dc|e4|e7|e8|e9|ea|f4|fc|f6)";
        if [ $? -eq 0 ]; then

                echo "$file_to_fix : ISO";
                iconv -f ISO-8859-15 -t UTF-8 "$file_to_fix" > temp_Convert.txt; cp temp_Convert.txt "$file_to_fix"

                sed -ri 's/\\xFC/ü/g' "$file_to_fix"
                sed -ri 's/\\xE4/ä/g' "$file_to_fix"
                sed -ri 's/\\xF6/ö/g' "$file_to_fix"

                sed -ri 's/\\xC4/Ä/g' "$file_to_fix"
                sed -ri 's/\\xDC/Ü/g' "$file_to_fix"
                sed -ri 's/\\xD6/Ö/g' "$file_to_fix"

                sed -ri 's/\\1E9E/ẞ/g' "$file_to_fix"
                sed -ri 's/\\xDF/ß/g' "$file_to_fix"

                sed -ri 's/\\xE9/é/g' "$file_to_fix"
                sed -ri 's/\\xE8/è/g' "$file_to_fix"
                sed -ri 's/\\xEA/ê/g' "$file_to_fix"

                sed -ri 's/\\xE7/ç/g' "$file_to_fix"
                sed -ri 's/\\xC7/Ç/g' "$file_to_fix"

                #iconv -f ISO-8859-15 -t UTF-8 $file_to_fix > temp_Convert.txt; cp temp_Convert.txt $file_to_fix
        fi;
done


Unix Filenamen Korrektur

Werden Filenamen etwa so: DruckerHinzuf▒gen.txt und nicht so: DruckerHinzufügen.txt, müssen diese korrigiert werden!

Bei wenigen Dateien kann diese Umbenennung von Hand erfolgen. Was aber, wenn sehr viele Dateinamen zu korrigieren sind? Auch hier ist bereits ein geeignetes Linux-Utility vorhanden: convmv. Mit dem Befehl

# convmv -f iso-8859-15 -t utf-8 --notest -r /data/webhome/bullnix-int.post.ch/pages/foswiki/data

werden im angegeben Verzeichnis die Dateinamen vom Zeichensatz ISO-8859-15 in den Zeichensatz UTF-8 konvertiert. Mit dem Schalter -r kann diese Aufgabe auch gleich für alle darunterliegenden Verzeichnisse ausgeführt werden. Sollte das Utility nicht bereits auf dem Rechner installiert worden sein, kann es über yum mit dem Befehl: # yum install convmv installiert werden.


Löschen der *.backup files

Endgültiges löschen aller *.backup files aus allen Unterverzeichnissen!

# cd /data/webhome/bullnix-int.post.ch/pages/foswiki/data
# find . -name "*.backup"  | while read F; do echo $F; rm -f $F; done