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.