Cygwin lub GnuWin32 zapewniają narzędzia uniksowe, takie jak iconvi dos2unix(i unix2dos). W systemach Unix / Linux / Cygwin będziesz chciał użyć „Windows-1252” jako kodowania zamiast ANSI (patrz poniżej). (O ile nie wiesz, że twój system używa strony kodowej innej niż 1252 jako domyślnej strony kodowej, w takim przypadku musisz powiedzieć iconv właściwej stronie kodowej, z której chcesz tłumaczyć.)
Konwertuj z jednej ( -f) na drugą ( -t) za pomocą:
$ iconv -f windows-1252 -t utf-8 infile > outfile
Lub w formie „znajdź i podbij”:
## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 {} \> {} \;
Alternatywnie:
## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 -o {} {} \;
To pytanie było zadawane wiele razy na tej stronie, więc oto dodatkowe informacje na temat „ANSI”. W odpowiedzi na powiązane pytanie CesarB wspomina :
Istnieje kilka kodowań, które w systemie Windows nazywane są „ANSI”. W rzeczywistości
ANSI jest mylące . iconv nie ma możliwości zgadnięcia, które chcesz.
Kodowanie ANSI to kodowanie używane przez funkcje „A” w interfejsie API systemu Windows (funkcje „W” używają UTF-16). To, które kodowanie odpowiada, zwykle zależy od języka systemu Windows. Najczęstszym jest CP 1252 (znany również jako Windows-1252). Tak więc, gdy twój edytor mówi ANSI, oznacza to „cokolwiek funkcje API wykorzystują jako domyślne kodowanie ANSI”, które jest domyślnym kodowaniem innym niż Unicode używanym w twoim systemie (a więc zwykle tym, które jest używane dla plików tekstowych).
Strona, do której prowadzi, podaje ten historyczny smakołyk (cytowany z Microsoft PDF ) na temat pochodzenia CP 1252 i ISO-8859-1, innego często używanego kodowania:
[...] wynika to z faktu, że strona kodowa Windows 1252 była pierwotnie oparta na szkicu ANSI, który stał się normą ISO 8859-1. Jednak dodając punkty kodowe do zakresu zarezerwowanego dla kodów kontrolnych w standardzie ISO, strona kodowa Windows 1252 i kolejne strony kodowe Windows pierwotnie oparte na serii ISO 8859-x odbiegały od ISO. Do dziś często zdarza się, że społeczność programistów, zarówno w firmie Microsoft, jak i poza nią, myli stronę kodową 8859-1 z Windows 1252, a także widzi „ANSI” lub „A” używane do oznaczania obsługi strony kodowej Windows .
Nie używaj tej samej nazwy pliku jako danych wejściowych i wyjściowych! iconvwydaje się obcinać pliki do 32 768 bajtów, jeśli przekraczają ten rozmiar. Gdy pisze w pliku, z którego próbuje odczytać, udaje mu się wykonać zadanie, jeśli plik jest wystarczająco mały, w przeciwnym razie
przycina
1
FYI To pytanie jest oznaczone osx i nie wygląda na to, że żadne z poleceń konwersji-wszystkich działa na Yosemite lub El Cap. Wersje iconv Apples Shipty nie obsługują opcji --verbose lub -o, a inna metoda przekierowywania składni stdout nie działa z jakiegoś powodu i po prostu wysyła ją do standardowego stdout.
Konwersja ANSI na UTF za pomocą pierwszej propozycji powoduje usunięcie całej zawartości mojego pliku tekstowego ...
Acroneos
@Acroneos: wtedy popełniłeś błąd: plik wejściowy to IN.txt, plik wyjściowy to OUT.txt ... w ten sposób niemożliwe jest zastąpienie oryginału. jeśli użyłeś tej samej nazwy pliku dla IN.txt i OUT.txt, to oczywiście zastąpisz plik, z którego czytasz.
akira,
Powershell przekonwertuje na UTF z BOM. find i iconv mogą być znacznie łatwiejsze.
pparas
6
Strona Wikipedii na temat nowych linii zawiera sekcję dotyczącą narzędzi do konwersji .
To wydaje się być najlepszym rozwiązaniem do konwersji przy użyciu tylko narzędzi dostarczanych z systemem Windows:
UTFCast to konwerter Unicode dla Windows, który obsługuje tryb wsadowy. Korzystam z wersji płatnej i czuję się z nią komfortowo.
UTFCast to konwerter Unicode, który umożliwia grupową konwersję wszystkich plików tekstowych na kodowanie UTF jednym kliknięciem myszy. Można go użyć do konwersji katalogu pełnego plików tekstowych na kodowanie UTF, w tym UTF-8, UTF-16 i UTF-32, do katalogu wyjściowego, zachowując jednocześnie strukturę katalogów oryginalnych plików. Nie ma nawet znaczenia, czy plik tekstowy ma inne rozszerzenie, UTFCast może automatycznie wykryć pliki tekstowe i przekonwertować je.
Och, wersja ekspresowa (darmowa) jest bezużyteczna - tylko „wykrywa” utf-8 Z BOM !! (każdy może zrobić to ). Tylko wersja Pro, która automatycznie odnawia się co 3 miesiące po 20 USD za pop, automatycznie wykryje. Cena jest wysoka dla użytkowników spoza przedsiębiorstwa. OSTRZEŻENIE, jeśli wypróbujesz wersję podstawową, a plik ma już utf-8 (bez BOM), to ten konwerter wykryje go jako ASCII, a następnie (ponownie -) „przekonwertuje” go na utf-8, co może spowodować bełkot . Bądź tego świadomy przed wypróbowaniem wersji ekspresowej! Mają wersję demonstracyjną dla pro, która nie generuje żadnych wyników - bezcelowe IMHO, ponieważ nie może zweryfikować wyników przed zakupem!
SherylHohman
3
Oneliner używa find, z automatycznym wykrywaniem
Kodowanie znaków wszystkich pasujących plików tekstowych jest wykrywane automatycznie, a wszystkie pasujące pliki tekstowe są konwertowane na utf-8kodowanie:
W celu przeprowadzenia tych etapów podpowłoki shjest używany -exec, prowadzenie jedną wkładkę z -cflagą i przepuszczenie pliku jako argumentu położenia "$1"z -- {}. W międzyczasie utf-8plik wyjściowy ma tymczasową nazwę converted.
findKomenda jest bardzo użyteczna dla takiej automatyzacji zarządzania plikami.
W moim przypadku użycia potrzebowałem automatycznego wykrywania kodowania wejściowego i było wiele plików z Windows-1250kodowaniem, dla których komenda file -bi <FILE>zwraca charset=unknown-8bit. To nie jest poprawny parametr dla iconv.
Odpowiedzi:
Cygwin lub GnuWin32 zapewniają narzędzia uniksowe, takie jak
iconv
idos2unix
(iunix2dos
). W systemach Unix / Linux / Cygwin będziesz chciał użyć „Windows-1252” jako kodowania zamiast ANSI (patrz poniżej). (O ile nie wiesz, że twój system używa strony kodowej innej niż 1252 jako domyślnej strony kodowej, w takim przypadku musisz powiedzieć iconv właściwej stronie kodowej, z której chcesz tłumaczyć.)Konwertuj z jednej (
-f
) na drugą (-t
) za pomocą:Lub w formie „znajdź i podbij”:
Alternatywnie:
To pytanie było zadawane wiele razy na tej stronie, więc oto dodatkowe informacje na temat „ANSI”. W odpowiedzi na powiązane pytanie CesarB wspomina :
Strona, do której prowadzi, podaje ten historyczny smakołyk (cytowany z Microsoft PDF ) na temat pochodzenia CP 1252 i ISO-8859-1, innego często używanego kodowania:
źródło
iconv
wydaje się obcinać pliki do 32 768 bajtów, jeśli przekraczają ten rozmiar. Gdy pisze w pliku, z którego próbuje odczytać, udaje mu się wykonać zadanie, jeśli plik jest wystarczająco mały, w przeciwnym raziew PowerShell możesz zrobić coś takiego:
podczas gdy ENC jest czymś w rodzaju Unicode, ascii, utf8, utf32. kasa „plik pomocy”.
aby przekonwertować wszystkie pliki * .txt w katalogu na utf8, wykonaj coś takiego:
który tworzy przekonwertowaną wersję każdego pliku .txt w DIR2.
EDYCJA: Aby zastąpić pliki we wszystkich podkatalogach, użyj:
źródło
Strona Wikipedii na temat nowych linii zawiera sekcję dotyczącą narzędzi do konwersji .
To wydaje się być najlepszym rozwiązaniem do konwersji przy użyciu tylko narzędzi dostarczanych z systemem Windows:
źródło
UTFCast to konwerter Unicode dla Windows, który obsługuje tryb wsadowy. Korzystam z wersji płatnej i czuję się z nią komfortowo.
źródło
Oneliner używa find, z automatycznym wykrywaniem
Kodowanie znaków wszystkich pasujących plików tekstowych jest wykrywane automatycznie, a wszystkie pasujące pliki tekstowe są konwertowane na
utf-8
kodowanie:W celu przeprowadzenia tych etapów podpowłoki
sh
jest używany-exec
, prowadzenie jedną wkładkę z-c
flagą i przepuszczenie pliku jako argumentu położenia"$1"
z-- {}
. W międzyczasieutf-8
plik wyjściowy ma tymczasową nazwęconverted
.find
Komenda jest bardzo użyteczna dla takiej automatyzacji zarządzania plikami.Kliknij tutaj, aby uzyskać więcej
find
obfitości .źródło
iconv -f original_charset -t utf-8 originalfile > newfile
uruchom powyższe polecenie w pętli for.
źródło
Użyj tego skryptu Python: https://github.com/goerz/convert_encoding.py Działa na dowolnej platformie. Wymaga Python 2.7.
źródło
Jest
dos2unix
na Uniksie.Było inne podobne narzędzie dla Windows ( tutaj można znaleźć inne odniesienie ).
Jak konwertować między plikami tekstowymi Unix i Windows? ma więcej sztuczek
źródło
dos2unix
jest użyteczny do konwersji podziałów linii , ale OP szuka konwersji kodowania znaków.Możesz użyć EncodingMaster . Jest bezpłatny, ma wersję Windows, Linux i Mac OS X i działa naprawdę dobrze.
źródło
W moim przypadku użycia potrzebowałem automatycznego wykrywania kodowania wejściowego i było wiele plików z
Windows-1250
kodowaniem, dla których komendafile -bi <FILE>
zwracacharset=unknown-8bit
. To nie jest poprawny parametr dlaiconv
.Z enca miałem najlepsze wyniki .
Konwertuj wszystkie pliki z rozszerzeniem txt na utf-8
źródło