Batch convert verschiedene charsets -> utf-8 ?

peterle

Forenkasper
Ich habe hier eine bunte Mischung von Dateien in verschiedenen charsets abgespeichert.

Als Beispiel:
Code:
#find . -type file -name '*.php' -exec file -bi {} \;
text/x-php; charset=us-ascii
text/x-php; charset=us-ascii
text/x-php; charset=us-ascii
text/x-php; charset=us-ascii
text/x-php; charset=us-ascii
text/x-php; charset=iso-8859-1

Nun sollen die charsets der Dateien alle nach utf-8 "umgemodelt" werden.

mit einer einzelnen Datei sieht das so aus:
Code:
iconv -f ISO-8859-1 -t utf-8 foo > bar

Probleme:
  1. Leider funktioniert aber ein iconv welches die eigene Datei wieder überschreibt scheinbar nicht
  2. Ein find mit Umleitung der Ausgabe in eine Datei funktioniert weder mit {} noch mit '{}'
  3. Habe ich mit find eine Möglichkeit die verschiedenen charsets zu filtern oder muß das in ein sh-script und dort mit der Ausgabe von file abgefangen werden?
 
Zuletzt bearbeitet:
Du könntest dir mittels while-Schleife was basteln...
Code:
find . -type f | while read filename; do echo $filename; done
Gruß
Markus
 
So was wie
# find . -type file -name '*.php' -exec sh -c "iconv -f ISO-8859-1 -t utf-8 {} > {}.tmp && mv {}.tmp {}" \;

Der sh -c Wrapper ist da damit das Output redirect funktioniert.
 
Dann kannste auch gleich ne while-Scheife ranpappen:

find | while read file; do ... "${file}" ...; done

Da gibts dann auch keine Probleme mit Leerzeichen im Namen. Sollte man zwar eh nicht haben bei solchen Fällen, aber warum nicht gleich mit erschlagen.
 
Danke für die Hinweise, ich schaue die Tage, was ich damit frickeln kann.
Was ich schon gelernt habe ... us-ascii ist ein utf-8 ohne Umlaute und folglich kann iconv auch nichts umwandeln.

Freundlicherweise scheint iconv recht intelligent zu sein und wenn der Ursprungszeichensatz nicht stimmt, macht er mit der Datei auch nichts.
 
Gut, dass du es nachgeschaut hast. Ich hatte mal nebenbei kurz getestet und bin auch darauf gestoßen, dass meine Testdateien mit us-ascii sich nicht in utf-8 umwandeln ließen :)

Gruß
Markus
 
UTF-8 nutzt die Zeichencodes des AscIIsatzes damit man auch in UTF-8 immer die Gewährleistung hat, dass es lesbar ist. Viele Zeichensätze machen das so. Die Belegung (0 bis 127 = 128 Zeichen) des AscII wird meist gleich übernommen. Kleinster gemeinsamer Nenner ist also in der Regel der 128er Satz.

Gruß Chu
 
Gut, dass du es nachgeschaut hast. Ich hatte mal nebenbei kurz getestet und bin auch darauf gestoßen, dass meine Testdateien mit us-ascii sich nicht in utf-8 umwandeln ließen :)

Sobald Du einen Umlaut in die Datei haust, wandelt sie sich bei mir in utf-8 um.
Habe ich auch dran geknobelt. ;)
 
Zurück
Oben