Jakie jest najszybsze, najłatwiejsze narzędzie lub metoda konwersji plików tekstowych między zestawami znaków?
W szczególności muszę przekonwertować z UTF-8 na ISO-8859-15 i odwrotnie.
Wszystko idzie: jednowierszowe w Twoim ulubionym języku skryptowym, narzędzia wiersza poleceń lub inne narzędzia do systemu operacyjnego, stron internetowych itp.
Najlepsze rozwiązania do tej pory:
W systemach Linux / UNIX / OS X / cygwin:
Gnu iconv sugerowany przez Troelsa Arvina najlepiej stosować jako filtr . Wydaje się być powszechnie dostępny. Przykład:
$ iconv -f UTF-8 -t ISO-8859-15 in.txt > out.txt
Jak zauważył Ben , istnieje internetowy konwerter wykorzystujący iconv .
Recode Gnu ( ręczne ) sugerowane przez Cheekysoft przekonwertuje jeden lub kilka plików w miejscu . Przykład:
$ recode UTF8..ISO-8859-15 in.txt
Ten używa krótszych aliasów:
$ recode utf8..l9 in.txt
Recode obsługuje również powierzchnie, które można wykorzystać do konwersji między różnymi typami zakończeń linii i kodowaniem:
Konwertuj znaki nowej linii z LF (Unix) na CR-LF (DOS):
$ recode ../CR-LF in.txt
Plik kodowania Base64:
$ recode ../Base64 in.txt
Możesz je również łączyć.
Konwertuj plik UTF8 zakodowany w Base64 z zakończeniami linii Unix na plik Latin 1 w formacie Base64 z zakończeniami linii Dos:
$ recode utf8/Base64..l1/CR-LF/Base64 file.txt
W systemie Windows z Powershell ( Jay Bazuzi ):
PS C:\> gc -en utf8 in.txt | Out-File -en ascii out.txt
(Brak obsługi ISO-8859-15; mówi, że obsługiwane zestawy znaków to Unicode, UTF7, UTF8, UT32, ASCII, Bigendianunicode, domyślny i OEM).
Edytować
Czy masz na myśli wsparcie iso-8859-1? Użycie „String” robi to np. Na odwrót
gc -en string in.txt | Out-File -en utf8 out.txt
Uwaga: Możliwe wartości wyliczeń to „Nieznany, Ciąg, Unicode, Bajt, BigEndianUnicode, UTF8, UTF7, Ascii”.
- CsCvt - Kalytta's Character Set Converter to kolejne świetne narzędzie do konwersji oparte na linii poleceń dla systemu Windows.
źródło
gc -en Ascii readme.html | Out-File -en UTF8 readme.html
ale konwertuje plik do utf-8, ale potem jest pusty! Notepad ++ mówi, że plik ma format Ansi, ale czytam, bo rozumiem, że to nawet nie jest prawidłowy zestaw znaków? uk.answers.yahoo.com/question/index?qid=20100927014115AAiRExFrecode
zadziała również jako filtr, jeśli nie podasz żadnych nazw plików, np .:recode utf8..l9 < in.txt > out.txt
enca
, nie musisz określać kodowania wejściowego. Jest to na tyle często, żeby określić język:enca -L ru -x utf8 FILE.TXT
.iconv -f UTF-32 -t UTF-8 input.csv > output.csv
zapisanych tylko około siedmiuset tysięcy linii, tylko jedna trzecia. Za pomocą wersjiiconv -f UTF-32 -t UTF-8 file.csv
lokalnej udało się przekonwertować wszystkie 2 miliony linii plus.Odpowiedzi:
Samodzielne podejście do użyteczności
Nie musisz podawać żadnego z tych argumentów. Będą domyślnie ustawione na bieżące ustawienia regionalne, którymi zwykle jest UTF-8.
źródło
iconv -l | grep UTF
poinformuje cię o wszystkich kodowaniach związanych z UTF, które obsługuje twoja kopia iconv.chardet in.txt
do generowania najlepszego odgadnięcia. Wynik można wykorzystać jako ENCODING wiconv -f ENCODING
.illegal input sequence at position
wiadomości) i zastąpić „weird” znaki z „podobny” znaków:iconv -c -f UTF-8 -t ISO-8859-1//TRANSLIT in.txt > out.txt
.ex
) poniżej . Informacje dodatkowe: (1) Ty (prawdopodobnie) nie musisz określać opcji-f
(od) za pomocąiconv
. (2)file --mime-encoding <file/s>
polecenie może pomóc w zrozumieniu kodowania.file
polecenie zgłosiło moje źródło jako UTF-16 Little Endian; uruchomioneiconv -f UTF-16 -t UTF-8...
przekształciło go niepoprawnie do ASCII, musiałem jawnie określić,iconv -f UTF-16LE...
aby wyprowadzić UTF-8Wypróbuj VIM
Jeśli tak
vim
, możesz użyć tego:Nie testowane dla każdego kodowania.
Fajne jest to, że nie musisz znać kodowania źródłowego
Pamiętaj, że to polecenie bezpośrednio modyfikuje plik
Część wyjaśniająca!
+
: Używany przez vima do bezpośredniego wprowadzenia polecenia podczas otwierania pliku. Zwykle używany do otwierania pliku w określonym wierszu:vim +14 file.txt
|
: Separator wielu poleceń (jak;
w bash)set nobomb
: brak BOM utf-8set fenc=utf8
: Ustaw nowe kodowanie na link do dokumentu utf-8x
: Zapisz i zamknij plikfilename.txt
: ścieżka do pliku"
: cytaty są tutaj z powodu potoków. (w przeciwnym razie bash użyje ich jako rury bash)źródło
vim -b
lubhead file.txt|cat -e
find -regextype posix-extended -type f -regex ".*\.(h|cpp|rc|fx|cs|props|xaml)" -exec vim +'set nobomb | set fenc=utf8 | x' {} \;
Pod Linuksem możesz użyć bardzo wydajnej komendy recode, aby spróbować konwertować różne zestawy znaków, a także wszelkie problemy z zakończeniem linii. recode -l pokaże wszystkie formaty i kodowania, między którymi narzędzie może konwertować. Prawdopodobnie będzie to BARDZO długa lista.
źródło
LF
? Jest/CR
i/CR-LF
nie ma/LF
iconv (1)
Istnieją również narzędzia oparte na iconv w wielu językach.
źródło
Najkrótsza wersja, jeśli możesz założyć, że BOM wejściowy jest poprawny:
źródło
gc .\file-utf8.txt | sc -en utf7 .\file-utf7.txt
Set-Content
działa lepiej niżOut-File
?file-utf8.txt
pliku do wprowadzania danych, ponieważ obie miały taki sam plik wyjściowy jakfile-utf7.txt
.gc -en Ascii readme.html | Out-File -en UTF8 readme.html
ale konwertuje plik do utf-8, ale potem jest pusty! Notepad ++ mówi, że plik ma format Ansi, ale czytam, bo rozumiem, że to nawet nie jest prawidłowy zestaw znaków? uk.answers.yahoo.com/question/index?qid=20100927014115AAiRExFWypróbuj funkcję Bash iconv
Umieściłem to w
.bashrc
:.. aby móc konwertować pliki w taki sposób:
źródło

na początku pliku.Wypróbuj Notepad ++
W systemie Windows mogłem użyć Notepad ++ do konwersji z ISO-8859-1 na UTF-8 . Kliknij,
"Encoding"
a następnie"Convert to UTF-8"
.źródło
Oneliner używa find, z automatycznym wykrywaniem zestawu znaków
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
.W ten
file -bi
sposób oznacza:-b
,--brief
Nie dołączaj nazw plików do linii wyjściowych (tryb skrócony).-i
,--mime
Powoduje, że komenda file wyświetla łańcuchy znaków typu MIME, a nie bardziej tradycyjne, czytelne dla człowieka. Dlatego może powiedzieć na przykładtext/plain; charset=us-ascii
zamiastASCII text
. Tesed
kawałki tego polecenia, aby tylkous-ascii
jak jest to wymagane przeziconv
.find
Komenda jest bardzo użyteczna dla takiej automatyzacji zarządzania plikami. Kliknij tutaj, aby uzyskać więcejfind
obfitości .źródło
find . -type f -iname *.txt -exec sh -c 'iconv -f $(file -b --mime-encoding "$1" | awk "{print toupper(\$0)}") -t UTF-8 > converted "$1" && mv converted "$1"' -- {} \;
sed
Polecenie jest tam celowe, umożliwiając automatyczne wykrywanie kodowania znaków. Rozszerzyłem odpowiedź, aby wyjaśnić to teraz. Uprzejmie byłoby w przypadku czytelników usunięcie wszelkich nieistotnych komentarzy. Dziękuję Ci.PHP iconv ()
iconv("UTF-8", "ISO-8859-15", $input);
źródło
DOS / Windows: użyj strony kodowej
Polecenia
chcp
można użyć do zmiany strony kodowej. Strona kodowa 65001 to nazwa Microsoft dla UTF-8. Po ustawieniu strony kodowej dane wyjściowe wygenerowane przez następujące polecenia będą ustawione na stronie kodowej.źródło
do pisania pliku właściwości (Java) zwykle używam tego w systemie Linux (dystrybucje mint i ubuntu):
Na przykład:
PS: Napisałem Wykonanie numer jeden / dwa w Portugalii, aby wymusić znaki specjalne.
W moim przypadku przy pierwszym wykonaniu otrzymałem ten komunikat:
Kiedy zainstalowałem pierwszą opcję (gcj-5-jdk) problem został zakończony.
Mam nadzieję, że komuś to pomoże.
źródło
Z rubinem:
Źródło: https://robots.thoughtbot.com/fight-back-utf-8-invalid-byte-sequences
ź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
Moim ulubionym narzędziem do tego jest Jedit (edytor tekstowy oparty na Javie), który ma dwie bardzo wygodne funkcje:
źródło
Wystarczy zmienić kodowanie załadowanego pliku w IntelliJ IDEA IDE, po prawej stronie paska stanu (u dołu), gdzie wskazany jest aktualny zestaw znaków. Wyświetla monit o ponowne załadowanie lub konwersję, użyj Konwertuj. Należy wcześniej wykonać kopię zapasową oryginalnego pliku.
źródło
Jeśli aplikacje macOS GUI to Twój chleb powszedni, SubEthaEdit to edytor tekstowy, do którego zwykle chodzę w celu zakodowania kodowania - jego „podgląd konwersji” pozwala zobaczyć wszystkie nieprawidłowe znaki w kodowaniu wyjściowym i je naprawić / usunąć.
I jest teraz open source , więc tak dla nich for.
źródło
Jak opisano w Jak poprawić kodowanie znaków w pliku? Synchronizuj to! umożliwia łatwą konwersję w systemie OS X między wszystkimi kodowaniami obsługiwanymi przez bibliotekę ICU .
Dodatkowo możesz wyświetlić niektóre bajty pliku przetłumaczonego na Unicode ze wszystkich kodowań, aby szybko sprawdzić, który jest odpowiedni dla twojego pliku.
źródło