Finden Sie alle UTF-16-codierten Dateien unter Windows

6

Gibt es ein Tool für Windows (Befehlszeile, GUI, Skript usw.), mit dem ein Verzeichnis wiederhergestellt und alle als UTF-16 codierten Dateien identifiziert werden können?

Mark Richman
quelle
Im Allgemeinen gibt es keine Möglichkeit, die Kodierung einer Textdatei automatisch und fehlerfrei zu erkennen. Allerdings: Wenn der Inhalt nur Zeichen aus dem ASCII-Bereich (oder meistens aus diesem Bereich) enthält, ist 0es ein guter Anfang , nach Dateien zu suchen, in denen jedes zweite Byte vorhanden ist .
Joachim Sauer
1
@Joachim: Ich denke für ausreichend große Dateien sollten die Erkennungsfehler vernachlässigbar sein. Etwas wie "Bush versteckte die Fakten" wird exponentiell unmöglich, sobald die Anzahl der Zeichen groß genug ist.
Philipp
1
@Philipp: Ich wusste nicht einmal von diesem speziellen Fall. Vielen Dank! Die Anzahl der zu erwartenden Fehler hängt jedoch stark vom tatsächlichen Inhalt Ihrer Dateien ab: Wenn es sich ausschließlich um englischen ASCII-Text handelt, ist die Erkennungsrate ziemlich gut (perfekt oder nahezu perfekt, würde ich schätzen). Aber wenn Sie UTF-16-kodierte chinesische, arabische, suahelische und hinduistische Texte zusätzlich zu vielen Binärdaten haben, wird es viel schlimmer sein.
Joachim Sauer
2
@ Joachim: Einverstanden. Nach meiner Erfahrung werden UTF-16-Dateien ohne Stückliste häufig von Windows-Systemtools (Installationsskripts, möglicherweise der Registrierungseditor) generiert, da es sich bei einer solchen Datei im Wesentlichen um einen Speicherauszug einer UTF-16-Zeichenfolge handelt. Solche Dateien enthalten oft viele ASCII-Markups, mit denen sie einfach identifiziert werden können. Der umgekehrte Weg (zu entscheiden, ob eine gültige UTF-16-Datei tatsächlich UTF-16 ist) ist natürlich viel schwieriger. Vielleicht könnte man testen, ob große Teile der Datei zu einem einzelnen Skript gehören, ob UTF-16-CRLF-Sequenzen vorkommen usw.
Philipp

Antworten:

2

Mit diesem Tool können Sie den Dateicodierungstyp anhand von Standardinformationen wie Suchmuster und Dateipfad ermitteln:

File Encoding Checker

File Encoding Checker ist ein GUI-Tool, mit dem Sie die Textcodierung einer oder mehrerer Dateien überprüfen können. Das Tool kann die Codierung für alle ausgewählten Dateien oder nur für Dateien anzeigen, die nicht die von Ihnen angegebenen Codierungen aufweisen.

Bildbeschreibung hier eingeben

Ich habe es selbst nicht benutzt, deshalb solltest du es dir ansehen.

Keine Chance
quelle
1

Ein langsamer Weg wäre, ein Konvertierungsprogramm zu verwenden und es für alle Dateien in einem Verzeichnis auszuführen. Diese Dateien, die erfolgreich von UTF-16 in ein anderes Format konvertiert wurden, sind höchstwahrscheinlich diejenigen, die Sie benötigen. Für diese Aufgabe können Sie ein verfügbares Tool wie den Zeichensatzkonverter auswählen .

Sie können ein solches Tool auch mit einem C ++ - Code-Snippet aus diesem Artikel schreiben. Konvertierung zwischen Unicode UTF-16 und UTF-8 in C ++ / Win32 . Das benutzerdefinierte Tool kann so optimiert werden, dass der erste Konvertierungsfehler behoben wird und der konvertierte Puffer nicht in einer Datei gespeichert wird.


quelle
1

Für UTF-16-Dateien mit Stückliste - PowerShell-Befehl

gci . -Include *.txt -Recurse | `
% { $c = gc $_.FullName -TotalCount 2 -Encoding Byte; `
    if ( $c.Length -gt 0 -and `
         (($c[0] -eq 255 -and $c[1] -eq 254) -or `
         ($c[0] -eq 254 -and $c[1] -eq 255)) `
        ) {$_.FullName} `
  }
Dmitry Sokolov
quelle
0

Es wäre nicht schwer, eine zu erstellen, die ersten beiden Bytes jeder Datei zu lesen und zu prüfen, ob sie auf FF FE (Windows) eingestellt sind.

pcunite
quelle