Cygwin oder GnuWin32 bieten Unix-Tools wie iconvund 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 mitteilen, von welcher Codepage die Übersetzung erfolgen 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 diesen historischen Leckerbissen (zitiert aus einem Microsoft PDF ) über die Ursprünge von CP 1252 und ISO-8859-1, einer weiteren häufig verwendeten Codierung:
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 Entwicklergemeinschaft 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 .
Verwenden Sie nicht den gleichen Dateinamen wie Eingabe und Ausgabe! iconvscheint Dateien auf 32.768 Byte zu kürzen, wenn sie diese Größe überschreiten. Während er in die Datei schreibt, aus der er zu lesen versucht, schafft er es, die Arbeit zu erledigen, wenn die Datei klein genug ist, ansonsten
schneidet
1
Zu Ihrer Information Diese Frage ist mit osx markiert und es sieht nicht so aus, als ob einer der Befehle zum Konvertieren auf Yosemite oder El Cap funktioniert. Die iconv-Version von Apples Ship unterstützt weder --verbose noch -o, und die andere Syntax zur Umleitung von stdout funktioniert aus irgendeinem Grund nicht und sendet sie einfach an die reguläre stdout.
Durch die Konvertierung von ANSI nach UTF über Ihren ersten Vorschlag wird der gesamte Inhalt meiner Textdatei gelöscht ...
Acroneos
@Acroneos: Dann haben Sie einen Fehler gemacht: Die Eingangsdatei ist IN.txt, die Ausgangsdatei ist OUT.txt ... auf diese Weise ist es unmöglich, das Original zu überschreiben. Wenn Sie für IN.txt und OUT.txt denselben Dateinamen verwendet haben, überschreiben Sie natürlich die Datei, aus der Sie gerade lesen.
Akira
Powershell konvertiert mit BOM nach UTF. find und iconv könnten viel einfacher sein.
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 damit ein Verzeichnis mit Textdateien in UTF-Codierungen wie UTF-8, UTF-16 und UTF-32 in ein Ausgabeverzeichnis konvertieren und dabei die Verzeichnisstruktur der Originaldateien beibehalten. Es spielt keine Rolle, ob Ihre Textdatei eine andere Erweiterung hat, UTFCast kann Textdateien automatisch erkennen und konvertieren.
Oh, die kostenlose Express-Version ist nutzlos - sie "erkennt" nur utf-8 WITH BOM !! (jeder kann tun , dass ). Nur die Pro-Version, die alle 3 Monate bei einem Preis von 20 US-Dollar automatisch erneuert wird, erkennt dies automatisch. Der Preis ist hoch für einen Nicht-Enterprise-Benutzer. UND Vorsicht, wenn Sie die Basisversion ausprobieren und Ihre Datei bereits utf-8 (ohne BOM) ist, erkennt dieser Konverter sie als ASCII und "konvertiert" sie (erneut) nach utf-8, was zu Kauderwelsch führen kann . Beachten Sie dies, bevor Sie die Express-Version testen! Sie haben eine Demoversion für den Pro, die keine Ausgabe erzeugt - sinnlos, IMHO, da die Ergebnisse vor dem Kauf nicht überprüft werden können!
SherylHohman
3
Oneliner using find, mit automatischer Erkennung
Die Zeichenkodierung aller übereinstimmenden Textdateien wird automatisch erkannt und alle übereinstimmenden Textdateien werden in utf-8Kodierung konvertiert :
Um diese Schritte auszuführen, wird eine Sub-Shell shverwendet -exec, die einen Einzeiler mit dem -cFlag ausführt und den Dateinamen als Positionsargument "$1"mit übergibt -- {}. Dazwischen wird die utf-8Ausgabedatei temporär benannt converted.
Der findBefehl ist für eine solche Dateiverwaltungsautomatisierung sehr nützlich.
In meinem Anwendungsfall brauchte ich eine automatische Erkennung der Eingabecodierung und es gab viele Dateien mit Windows-1250Codierung, für die der Befehl file -bi <FILE>zurückgibt charset=unknown-8bit. Dies ist kein gültiger Parameter für iconv.
Antworten:
Cygwin oder GnuWin32 bieten Unix-Tools wie
iconv
unddos2unix
(undunix2dos
). 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 mitteilen, von welcher Codepage die Übersetzung erfolgen soll.)Konvertieren Sie von einem (
-f
) zum anderen (-t
) mit:Oder in der Form, alles zu finden und zu erobern:
Alternative:
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 :
Die Seite, auf die er verweist, gibt diesen historischen Leckerbissen (zitiert aus einem Microsoft PDF ) über die Ursprünge von CP 1252 und ISO-8859-1, einer weiteren häufig verwendeten Codierung:
quelle
iconv
scheint Dateien auf 32.768 Byte zu kürzen, wenn sie diese Größe überschreiten. Während er in die Datei schreibt, aus der er zu lesen versucht, schafft er es, die Arbeit zu erledigen, wenn die Datei klein genug ist, ansonstenMit Powershell können Sie so etwas tun:
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:
Dadurch wird eine konvertierte Version jeder TXT-Datei in DIR2 erstellt.
BEARBEITEN: Um die Dateien in allen Unterverzeichnissen zu ersetzen, verwenden Sie:
quelle
Die Wikipedia-Seite zu Zeilenumbrüchen enthält einen Abschnitt zu Konvertierungsdienstprogrammen .
Dies scheint die beste Wahl für eine Konvertierung zu sein, die nur Tools verwendet, mit denen Windows ausgeliefert wird:
quelle
UTFCast ist ein Unicode-Konverter für Windows, der den Batch-Modus unterstützt. Ich benutze die kostenpflichtige Version und bin ziemlich zufrieden damit.
quelle
Oneliner using find, mit automatischer Erkennung
Die Zeichenkodierung aller übereinstimmenden Textdateien wird automatisch erkannt und alle übereinstimmenden Textdateien werden in
utf-8
Kodierung konvertiert :Um diese Schritte auszuführen, wird eine Sub-Shell
sh
verwendet-exec
, die einen Einzeiler mit dem-c
Flag ausführt und den Dateinamen als Positionsargument"$1"
mit übergibt-- {}
. Dazwischen wird dieutf-8
Ausgabedatei temporär benanntconverted
.Der
find
Befehl ist für eine solche Dateiverwaltungsautomatisierung sehr nützlich.Klicken Sie hier, um mehr zu
find
erfahren .quelle
iconv -f original_charset -t utf-8 originalfile > newfile
Führen Sie den obigen Befehl in der for-Schleife aus.
quelle
Verwenden Sie dieses Python-Skript: https://github.com/goerz/convert_encoding.py. Es funktioniert auf jeder Plattform. Benötigt Python 2.7.
quelle
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 noch ein paar Tricks
quelle
dos2unix
ist nützlich , um Zeilenumbrüche zu konvertieren , aber das OP sucht nach der Konvertierung von Zeichencodierungen.Sie können EncodingMaster verwenden . Es ist kostenlos, es hat eine Windows-, Linux- und Mac OS X-Version und funktioniert wirklich gut.
quelle
In meinem Anwendungsfall brauchte ich eine automatische Erkennung der Eingabecodierung und es gab viele Dateien mit
Windows-1250
Codierung, für die der Befehlfile -bi <FILE>
zurückgibtcharset=unknown-8bit
. Dies ist kein gültiger Parameter füriconv
.Ich habe mit enca die besten Ergebnisse erzielt .
Konvertieren Sie alle Dateien mit der Erweiterung txt nach utf-8
quelle