Кодировка файлов в Linux


Кодировка файлов в Linux при необходимости меняется с помощью утилиты iconv и аналогов.

Смену кодировок чаще всего приходится использовать при работе с базами данных когда какая-то информация на сайте отображается некорректно

Текущее значение кодировки файла можно посмотреть выполнив enca -L [language] FILENAME



Если пакета нет в системе — он устанавливается из репозитория, в Ubuntu так:

apt install enca

В примере на скриншоте представлена проверка текущей кодировки текстового файла:

Кодировка файлов в Linux


Значение кодировки 7bit ASCII это то же самое, что UTF-8. Также можно использовать утилиту file с ключом -i.



Использование iconv для изменения кодировки файлов в Linux


Кодировка файлов в Linux изменяется при помощи стандартной утилиты iconv

iconv позволяет перекодировать текстовые документы, в том числе — дампы баз данных, которые потом можно загружать в непосредственно в БД



Введя в консоли iconv --list можно получится список всех кодировок, которые поддерживаются.

root@note:/tmp# iconv --list
The following list contains all the coded character sets known. This does
not necessarily mean that all combinations of these names can be used for
the FROM and TO command line parameters. One coded character set can be
listed with several different names (aliases).

437, 500, 500V1, 850, 851, 852, 855, 856, 857, 858, 860, 861, 862, 863, 864,
......
US-ASCII, US, UTF-7, UTF-8, UTF-16, UTF-16BE, UTF-16LE, UTF-32, UTF-32BE,
  UTF-32LE, UTF7, UTF8, UTF16, UTF16BE, UTF16LE, UTF32, UTF32BE, UTF32LE,
  VISCII, WCHAR_T, WIN-SAMI-2, WINBALTRIM, WINDOWS-31J, WINDOWS-874,
  WINDOWS-936, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252, WINDOWS-1253,
  WINDOWS-1254, WINDOWS-1255, WINDOWS-1256, WINDOWS-1257, WINDOWS-1258,



Список очень большой, приведена только часть вывода. Между доступными кодировками можно проводить преобразования. Утилита работает с любыми типами файлов.



iconv для преобразования кодировки документа используется так:

iconv -f cp1251 -t UTF-8 -o database.sql > database_utf8.sql

-f — исходная кодировка (from)

-t — кодировка, в которую преобразуется документ (to)



Результат преобразования можно сразу загружать в БД.

(сделав предварительно бэкап предыдущего состояния)

iconv -f cp1251 -t UTF-8 -o database.sql | mysql -u root -p db1



Исходный файл при этом не изменяется.


В случае с SQL дампом базы данных бывает необходимо с помощью утилиты sed или с помощью текстового редактора вручную заменить все строки с указанием одной кодировки на аналогичные строки с указанием другой кодировки.



Читайте также про изменение изображений с помощью утилиты convert из пакета imagemagick

Сказать спасибо