it-swarm.com.de

Batch-Konvertierung von Dateien für die Codierung

Wie kann ich Dateien in einem Verzeichnis für ihre Codierung (z. B. ANSI-> UTF-8) mit einem Befehl oder Tool stapelweise konvertieren?

Für einzelne Dateien hilft ein Editor, aber wie erledigt man die Massendateien?

46
desolat

Cygwin oder GnuWin32 bieten Unix-Tools wie iconv und dos2unix (und unix2dos) . Unter Unix/Linux/Cygwin möchten Sie "windows-1252" anstelle von ANSI als Codierung verwenden (siehe unten). (Sofern Sie nicht wissen, dass Ihr System eine andere Codepage als 1252 als Standard-Codepage verwendet, müssen Sie in diesem Fall iconv die richtige Codepage angeben, von der übersetzt werden soll.)

Konvertieren Sie von einem (-f) zum anderen (-t) mit:

$ iconv -f windows-1252 -t utf-8 infile > outfile

Oder in der Form, alles zu finden und zu erobern:

## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 {} \> {} \;

Alternative:

## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 -o {} {} \;

Diese Frage wurde auf dieser Website schon oft gestellt. Hier finden Sie einige zusätzliche Informationen zu "ANSI". In einer Antwort auf eine verwandte Frage erwähnt CesarB :

Es gibt verschiedene Kodierungen, die in Windows "ANSI" genannt werden. Tatsächlich ist ANSI eine falsche Bezeichnung . iconv kann nicht erraten, was Sie wollen.

Die ANSI-Codierung ist die Codierung, die von den "A" -Funktionen in der Windows-API verwendet wird (die "W" -Funktionen verwenden UTF-16). Welcher Codierung sie entspricht, hängt normalerweise von Ihrer Windows-Systemsprache ab. Am gebräuchlichsten ist CP 1252 (auch als Windows-1252 bekannt). Wenn Ihr Editor also ANSI sagt, bedeutet dies "was auch immer die API-Funktionen als Standard-ANSI-Codierung verwenden". Dies ist die in Ihrem System standardmäßig verwendete Nicht-Unicode-Codierung (und daher normalerweise diejenige, die für Textdateien verwendet wird).

Die Seite, auf die er verweist, gibt diesem historischen Leckerbissen (zitiert aus ein Microsoft PDF zu den Ursprüngen von CP 1252 und ISO-8859-1, einem weiteren oft- verwendete Kodierung:

Dies ist darauf zurückzuführen, dass die Windows-Codepage 1252 ursprünglich auf einem ANSI-Entwurf basierte, der zum ISO-Standard 8859-1 wurde. Beim Hinzufügen von Codepunkten zu dem Bereich, der für Steuercodes im ISO-Standard reserviert ist, weichen die Windows-Codepage 1252 und nachfolgende Windows-Codepages, die ursprünglich auf der ISO 8859-x-Serie basieren, von der ISO ab. Bis heute ist es nicht ungewöhnlich, dass die Entwicklergemeinde innerhalb und außerhalb von Microsoft die Codepage 8859-1 mit Windows 1252 verwechselt und "ANSI" oder "A" zur Kennzeichnung der Windows-Codepageunterstützung verwendet .

36
quack quixote

mit powershell kannst du so etwas machen:

%  get-content IN.txt | out-file -encoding ENC -filepath OUT.txt

während ENC ist so etwas wie Unicode, ASCII, UTF8, UTF32. checkout 'help out-file'.

so konvertieren Sie alle * .txt-Dateien in einem Verzeichnis nach utf8:

% foreach($i in ls -name DIR/*.txt) { \
       get-content DIR/$i | \
       out-file -encoding utf8 -filepath DIR2/$i \
  }

hierdurch wird eine konvertierte Version jeder TXT-Datei in DIR2 erstellt.

BEARBEITEN: Um die Dateien in allen Unterverzeichnissen zu ersetzen, verwenden Sie:

% foreach($i in ls -recurse -filter "*.Java") {
    $temp = get-content $i.fullname
    out-file -filepath $i.fullname -inputobject $temp -encoding utf8 -force
}
28
akira

Die Wikipedia-Seite zu Zeilenumbrüchen enthält einen Abschnitt zu Konvertierungsprogrammen .

Dies scheint die beste Wahl für eine Konvertierung zu sein, die nur Tools verwendet, mit denen Windows ausgeliefert wird:

TYPE unix_file | FIND "" /V > dos_file
6
nagul

UTFCast ist ein Unicode-Konverter für Windows, der den Batch-Modus unterstützt. Ich benutze die kostenpflichtige Version und bin ziemlich zufrieden damit.

UTFCast ist ein Unicode-Konverter, mit dem Sie alle Textdateien mit nur einem Mausklick stapelweise in UTF-Codierungen konvertieren können. Sie können es verwenden, um ein Verzeichnis mit Textdateien in UTF-Codierungen, einschließlich UTF-8, UTF-16 und UTF-32, in ein Ausgabeverzeichnis zu konvertieren und dabei die Verzeichnisstruktur der Originaldateien beizubehalten. Es spielt keine Rolle, ob Ihre Textdatei eine andere Erweiterung hat, UTFCast kann Textdateien automatisch erkennen und konvertieren.

3
Tiler

Oneliner using find, mit automatischer Erkennung

Die Zeichenkodierung aller übereinstimmenden Textdateien wird automatisch erkannt und alle übereinstimmenden Textdateien werden in utf-8-Kodierung konvertiert:

$ find . -type f -iname *.txt -exec sh -c 'iconv -f $(file -bi "$1" |sed -e "s/.*[ ]charset=//") -t utf-8 -o converted "$1" && mv converted "$1"' -- {} \;

Um diese Schritte auszuführen, wird mit -exec eine Unterschale sh verwendet, die einen Einzeiler mit dem Flag -c ausführt und den Dateinamen als Positionsargument "$1" mit -- {} übergibt. Dazwischen heißt die Ausgabedatei utf-8 vorübergehend converted.

Der Befehl find ist für eine solche Dateiverwaltungsautomatisierung sehr nützlich.

Klicken Sie hier für weitere find in Hülle und Fülle .

2

iconv -f original_charset -t utf-8 originalfile > newfile

führen Sie den obigen Befehl in der for-Schleife aus.

1
Aneesh Garg

Sie können EncodingMaster verwenden. Es ist kostenlos, es hat eine Windows-, Linux- und Mac OS X-Version und funktioniert wirklich gut.

0
Francisco Vera

In meinem Anwendungsfall benötigte ich eine automatische Erkennung der Eingabecodierung und es gab viele Dateien mit Windows-1250-Codierung, für die der Befehl file -bi <FILE>charset=unknown-8bit zurückgibt. Dies ist kein gültiger Parameter für iconv.

Ich hatte die besten Ergebnisse mit enca .

Konvertiere alle Dateien mit der Erweiterung txt nach utf-8

find . -type f -iname *.txt -exec sh -c 'echo "$1" && enca "$1" -x utf-8' -- {} \;
0
Bedla

Verwenden Sie dieses Python-Skript: https://github.com/goerz/convert_encoding.py Es funktioniert auf jeder Plattform. Benötigt Python 2.7.

0
kinORnirvana

Es gibt dos2unix unter Unix.
Es gab ein anderes ähnliches Tool für Windows ( eine andere Referenz hier ).

Wie konvertiere ich zwischen Unix- und Windows-Textdateien? hat einige weitere Tricks

0
nik