Wyszukiwanie w witrynie

Jak konwertować pliki do kodowania UTF-8 w systemie Linux


W tym przewodniku opiszemy, jakie kodowanie znaków i omówimy kilka przykładów konwersji plików z jednego kodowania znaków na inne za pomocą narzędzia wiersza poleceń. Na koniec przyjrzymy się, jak przekonwertować kilka plików z dowolnego zestawu znaków (charset) na kodowanie UTF-8 w systemie Linux.

Jak zapewne już pamiętasz, komputer nie rozumie ani nie przechowuje liter, cyfr ani niczego innego, co my, ludzie, możemy dostrzec z wyjątkiem bitów. Bit ma tylko dwie możliwe wartości, czyli 0 lub 1, true lub false, tak lub nie. Każda inna rzecz, taka jak litery, cyfry, obrazy, musi być reprezentowana w bitach, aby komputer mógł je przetworzyć.

Krótko mówiąc, kodowanie znaków to sposób informowania komputera, jak interpretować nieprzetworzone zera i jedyneki na rzeczywiste znaki, gdzie znak jest reprezentowany przez zbiór liczb. Kiedy wpisujemy tekst w pliku, utworzone przez nas słowa i zdania są tworzone z różnych znaków, a znaki są zorganizowane w zestaw znaków.

Istnieją różne schematy kodowania, takie jak między innymi ASCII, ANSI, Unicode. Poniżej znajduje się przykład kodowania ASCII.

Character  bits
A               01000001
B               01000010

W systemie Linux narzędzie wiersza poleceń iconv służy do konwertowania tekstu z jednej formy kodowania na inną.

Kodowanie pliku możesz sprawdzić za pomocą polecenia file, używając flagi -i lub --mime, która umożliwia drukowanie typu MIME ciąg znaków jak w przykładach poniżej:

file -i Car.java
file -i CarDriver.java

Składnia użycia iconv jest następująca:

iconv option
iconv options -f from-encoding -t to-encoding inputfile(s) -o outputfile 

Gdzie -f lub --from-code oznacza kodowanie wejściowe, a -t lub --to-encoding określa kodowanie wyjściowe.

Aby wyświetlić listę wszystkich znanych zestawów znaków kodowanych, uruchom poniższe polecenie:

iconv -l 

Konwertuj pliki z kodowania UTF-8 na ASCII

Następnie dowiemy się, jak dokonać konwersji z jednego schematu kodowania na inny. Poniższe polecenie konwertuje z kodowania ISO-8859-1 na UTF-8.

Rozważmy plik o nazwie input.file, który zawiera znaki:


� � � �

Zacznijmy od sprawdzenia kodowania znaków w pliku, a następnie przejrzyjmy zawartość pliku. Dokładnie, możemy przekonwertować wszystkie znaki na kodowanie ASCII.

Po uruchomieniu polecenia iconv sprawdzamy zawartość pliku wyjściowego i nowe kodowanie znaków, jak poniżej.

file -i input.file
cat input.file 
iconv -f ISO-8859-1 -t UTF-8//TRANSLIT input.file -o out.file
cat out.file 
file -i out.file 

Uwaga: w przypadku dodania ciągu //IGNORE do kodowania, znaki, których nie można przekonwertować, i wyświetlony zostanie błąd po konwersji.

Ponownie, zakładając, że ciąg //TRANSLIT zostanie dodany do kodowania, jak w powyższym przykładzie (ASCII//TRANSLIT), konwertowane znaki są transliterowane w razie potrzeby i jeśli to możliwe . Oznacza to, że w przypadku, gdy znaku nie można przedstawić w docelowym zestawie znaków, można go przybliżyć za pomocą jednego lub większej liczby podobnie wyglądających znaków.

W rezultacie każdy znak, którego nie można transliterować i który nie znajduje się w docelowym zestawie znaków, jest zastępowany na wyjściu znakiem zapytania (?).

Konwertuj wiele plików na kodowanie UTF-8

Wracając do naszego głównego tematu, aby przekonwertować wiele lub wszystkie pliki w katalogu na kodowanie UTF-8, możesz napisać mały skrypt powłoki o nazwie encoding.sh w następujący sposób:

#!/bin/bash
#enter input encoding here
FROM_ENCODING="value_here"
#output encoding(UTF-8)
TO_ENCODING="UTF-8"
#convert
CONVERT=" iconv  -f   $FROM_ENCODING  -t   $TO_ENCODING"
#loop to convert multiple files 
for  file  in  *.txt; do
     $CONVERT   "$file"   -o  "${file%.txt}.utf8.converted"
done
exit 0

Zapisz plik, a następnie uczyń skrypt wykonywalnym. Uruchom go z katalogu, w którym znajdują się Twoje pliki (*.txt).

chmod  +x  encoding.sh
./encoding.sh

Ważne: możesz również użyć tego skryptu do ogólnej konwersji wielu plików z jednego danego kodowania na inne, po prostu pobaw się wartościami FROM_ENCODING i zmienną TO_ENCODING, nie zapominając o nazwie pliku wyjściowego "&36 {file%.txt}.utf8.converted".

Aby uzyskać więcej informacji, przejrzyj stronę podręcznika iconv.

man iconv

Podsumowując ten przewodnik, zrozumienie kodowania i sposobu konwersji z jednego schematu kodowania znaków na inny jest niezbędną wiedzą dla każdego użytkownika komputera, a zwłaszcza dla programisty, jeśli chodzi o pracę z tekstem.

Na koniec możesz skontaktować się z nami, korzystając z sekcji komentarzy poniżej, jeśli masz pytania lub opinie.