UTF-8 Byte Order Mark setzen: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: „Nachträgliches Setzen des BOM unter Linux: :<code>find . -type f | while read filename; do if file --mime-encoding $filename | grep -q us-ascii; then echo $f…“) |
Keine Bearbeitungszusammenfassung |
||
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 2: | Zeile 2: | ||
:<code>find . -type f | while read filename; do if file --mime-encoding $filename | grep -q us-ascii; then echo $filename; sed -i -e '1s/^/\xef\xbb\xbf/g' $filename; fi; done</code> | :<code>find . -type f | while read filename; do if file --mime-encoding $filename | grep -q us-ascii; then echo $filename; sed -i -e '1s/^/\xef\xbb\xbf/g' $filename; fi; done</code> | ||
Nachträgliches Setzen des BOM mit Windows Powershell: | |||
:<code>dir -recurse -name -file | foreach { $t = [System.IO.File]::ReadAllText($_, [System.Text.Encoding]::Utf8) ; [System.IO.File]::WriteAllText($_, $t, [System.Text.Encoding]::Utf8) }</code> | |||
== Erläuterung == | == Erläuterung == | ||
Zeile 9: | Zeile 14: | ||
Solange die betroffenen Dateien noch reiner ASCII-Text sind, lassen sie sich mit dem obigen Kommando bereits vorsorglich als UTF-8 deklarieren, um externe Texteditoren frühzeitig auf die richtige Spur zu setzen. | Solange die betroffenen Dateien noch reiner ASCII-Text sind, lassen sie sich mit dem obigen Kommando bereits vorsorglich als UTF-8 deklarieren, um externe Texteditoren frühzeitig auf die richtige Spur zu setzen. | ||
== Wenn das Kind im Teich liegt == | |||
Falls dennoch das Encoding von verteilt über den Bestand liegenden Dateien per Massenänderung korrigiert werden muss: | |||
:<code>find . -not -path '*/\.*' -type f | while read filename; do if file --mime-encoding $filename | grep -q iso-8859-1; then echo $filename; recode ISO-8859-1..UTF8 $filename; fi; done</code> |
Aktuelle Version vom 27. Dezember 2022, 08:31 Uhr
Nachträgliches Setzen des BOM unter Linux:
find . -type f | while read filename; do if file --mime-encoding $filename | grep -q us-ascii; then echo $filename; sed -i -e '1s/^/\xef\xbb\xbf/g' $filename; fi; done
Nachträgliches Setzen des BOM mit Windows Powershell:
dir -recurse -name -file | foreach { $t = [System.IO.File]::ReadAllText($_, [System.Text.Encoding]::Utf8) ; [System.IO.File]::WriteAllText($_, $t, [System.Text.Encoding]::Utf8) }
Erläuterung
Alle Zusi-XML-Dateien sollen UTF-8-codiert sein und enthalten eine entsprechende Deklaration im XML-Text. Die Zusi-Editoren erzeugen ihre Dateien mit dem Byte Order Mark, so dass für externe Tools eindeutig feststellbar ist, dass in UTF-8 codiert werden soll.
Probleme ergeben sich bei Zusi-XML-Dateien, die mit externen Texteditoren erzeugt wurden. Solange die Dateien noch keine Sonderzeichen wie deutsche Umlaute und keinen Byte Order Mark enthalten, sind sie sowohl gültiger ASCII-Text als auch gültiges UTF-8. Es gibt auch heute noch Editoren, die in so einem Fall dann von ASCII-Text ausgehen. Kritisch ist insbesondere der Fall, wenn in eine solche Datei nachträglich doch noch Sonderzeichen per externem Editor eingefügt werden sollen. Das Ergebnis ist dann in der Regel ein in Windows-1252 codierter Text. Dieser steht dann im Widerspruch zu der Deklaration encoding="UTF-8" im XML-Inhalt der Datei.
Solange die betroffenen Dateien noch reiner ASCII-Text sind, lassen sie sich mit dem obigen Kommando bereits vorsorglich als UTF-8 deklarieren, um externe Texteditoren frühzeitig auf die richtige Spur zu setzen.
Wenn das Kind im Teich liegt
Falls dennoch das Encoding von verteilt über den Bestand liegenden Dateien per Massenänderung korrigiert werden muss:
find . -not -path '*/\.*' -type f | while read filename; do if file --mime-encoding $filename | grep -q iso-8859-1; then echo $filename; recode ISO-8859-1..UTF8 $filename; fi; done