Lade...
 

CXCPCONVERTER.EXE

CXCPCONVERTER.EXE

Das Programm cxcpconverter.exe ("Codepage-Converter") wird zur Verfügung gestellt, um Dateien von bestimmten Kodierungen in andere zu übertragen.

Folgende Kodierungen können beliebig ineinander übertragen werden:

  • UTF-8 (1-Byte Unicode)
  • UTF-8 mit BOM (1-Byte Unicode mit 3-Byte Byte-Order-Mark zu Beginn der Datei)
  • UTF-16 Little Endian mit BOM (2-Byte Unicode mit 2-Byte Byte-Order-Mark zu Beginn der Datei)
  • ANSI (1-Byte Systemcodepage von Windows. Meist gleichbedeutend zu Windows1252)

Aufruf & Parameter

Grundsätzlich sieht der Aufruf wie folgt aus:

cxcpconverter.exe ...

  • Der erste Parameter gibt an, wie sich das Programm verhalten soll, wenn eine Datei mit Schreibschutz konvertiert werden soll
    • O entfernt den Schreibschutz und konvertiert die Datei
    • R überspringt die Datei und meldet dies als Fehler in der Ausgabe
  • Der zweite Parameter gibt die Quellcodierung an. Alle zu konvertierenden Dateien werden so interpretiert, als wären sie mit dieser Codepage codiert.
    Parameter Bedeutung
    S Systemkodierung/ANSI (Wenn nicht anders angegeben werden Dateien in Windows so angelegt)
    U8 UTF-8 Unicode. Sollte die Datei eine BOM enthalten (bei UTF-8 eher unüblich), dann wird die BOM als Teil des Dokuments interpretiert,
    U8B, U8BOM UTF-8 Unicode mit optinaler BOM. Sollte eine Quelldatei keine BOM enthalten, ist dies kein Fehler
    U16 UTF-16 Little Endian mit optionaler BOM. Sollte die Quelldatei keine BOM enthalten, ist dies kein Fehler.
  • Der dritte Parameter gibt die Zielcodierung an
    Parameter Bedeutung
    S Systemkodierung/ANSI (Wenn nicht anders angegeben werden Dateien in Windows so angelegt)
    U8 UTF-8 Unicode
    U8B, U8BOM UTF-8 Unicode mit BOM.
    U16 UTF-16 Little Endian mit BOM
  • Der vierte Parameter gibt das Verzeichnis an, in welchem das Programm die zu konvertierenden Dateien suchen soll.
    Die Suche nach Dateien bezieht sich normalerweise nur auf das angegebene Verzeichnis. Sollen die Dateien rekursiv in allen Unterverzeichnissen gesucht werden, so muss dem Verzeichnispfad \* angehängt werden. Dadurch werden Dateien, deren Endungen angegeben wurden rekursiv gesucht, Dateien, die mit vollem Namen angegeben wurden, werden ausschließlich im Ausgangsverzeichnis gesucht.
    Wenn das Verzeichnis Leerzeichen enthält, dann muss der Parameter in Anführungszeichen eingeschlossen werden.
  • 5. - N. Parameter bezeichnet eine Dateiendung, oder Dateiname, welche in die Liste der zu konvertierenden Dateien aufgenommen wird.
    • Eine Dateiendung muss mit führendem Punkt angegeben werden. Bsp: .ini .txt .xml .tar.gz
    • Einzelne Dateien können ebenfalls angegeben werden. Sie dürfen nicht mit einem Punkt beginnen und sollten sie Leerzeichen beinhalten, müssen sie in Anführungsstrichen eingeschlossen werden. Bsp: test.txt "hallo welt.txt"
      Diese Dateien werden immer nur im obersten Verzeichnis gesucht.

Ausgabe

Die Ausgabe besteht aus einer Auflistung der angefassten Dateien. Die Ausgabe kann beispielsweise wie folgt aussehen:

T:\>cxcpconverter.exe R S U8 C:\enctest\* .txt [SUC] C:\enctest\a.txt [ERR] write protected: C:\enctest\aa.txt [SUC] C:\enctest\b.txt [SUC] C:\enctest\bs\b.txt [SUC] C:\enctest\bs\bb.txt [SUC] C:\enctest\bs\bbb.txt [SUC] C:\enctest\bs\bbbb.txt [SUC] C:\enctest\c.txt [SUC] C:\enctest\d.txt [SUC] C:\enctest\e.txt [SUC] C:\enctest\f.txt [SUC] C:\enctest\g.txt [SUC] C:\enctest\h.txt [SUC] C:\enctest\i.txt [SUC] C:\enctest\j.txt [SUC] C:\enctest\k.txt [SUC] C:\enctest\l.txt

Die Ausgabe der erfolgreich konvertierten Dateien dient zur Kontrolle, um keine Datei mehrfach zu konvertieren und um sicher zu gehen, dass die richtigen Dateien gefunden wurden. Da das Programm alle Fehler auf dem Fehlerstream ausgibt, kann man sich auch ausschließlich die Fehler mit folgendem Aufruf ausgeben lassen.

T:\>cxcpconverter.exe R S U8 C:\enctest\* .txt 1> NUL [ERR] write protected: C:\enctest\aa.txt

Alternativ können STDOUT und STDERR auch in Dateien umgeleitet werden.
Um alle Dateien zuverlässig umzuwandeln sollte als erster Parameter O gewählt werden. Ist dieser Parameter gewählt, sollten eigentlich keine Fehler auftreten. (Es sei denn, man hat keinen Lesezugriff auf Dateien)

Anmerkungen

Bei der Konvertierung von UTF-16 wird nur Little-Endian unterstützt und die Byte-Order-Mark (BOM) wird überlesen (wenn vorhanden). Wird nach UTF-16 konvertiert, dann wird die BOM eingefügt.

Das Programm hat leider keine Möglichkeit festzustellen, welche Kodierung eine Datei besitzt und verlässt sich komplett auf die übergebenen Parameter. Deshalb sollten Dateien auf keinen Fall mehrfach konvertiert werden, weil dadurch Sonderzeichen komplett falsch dargestellt werden, oder eine BOM mehrfach eingefügt wird.

Als kleines Implementierungsdetail: Die Dateien werden in 4096-Byte-Blöcken eingelesen und konvertiert, was die standardmäßige Größe von Dateiblöcken unter Windows für NTFS ist. Die bereits konvertierten Blöcke werden in eine temporäre Datei im %TEMP%-Verzeichnis geschrieben und bei vollständiger Konvertierung wird die Originaldatei gelöscht und durch die Temp-Datei ersetzt. Dadurch wird vermieden, dass eine Datei nur teilweise konvertiert wird und die Datei inkonsistent wird, falls der Prozess mitten in der Konvertierung. abstürzen sollte. Entweder eine Datei wird komplett konvertiert, oder gar nicht.

Die temporäre Datei wird beim Ersetzen der Originaldatei nur umbenannt, was dazu führt, dass wenn die zu konvertierende Datei auf der gleichen Partition liegt, wie das Temp-Verzeichnis, nicht die gesamte Datei umkopiert werden muss.