💾 Archived View for tilde.team › ~rami › iconv_chardetect.gmi captured on 2024-12-17 at 11:35:45. Gemini links have been rewritten to link to archived content

View Raw

More Information

-=-=-=-=-=-=-

~Rami ₪ MANUALS

רמי

SUBJECT: CHARDETECT / ICONV: Определение и переконвертирование кодировки текстового файла в консоли

AUTHOR: Rami Rosenfeld

DATE: 22/11/24

TIME: 20.00

LANG: ru, en

LICENSE: GNU FDL 1.3

TAGS: gnu, gnome, software, opensource, linux, system, man, manual, bash, privacy, security, rhel, centos, mate, xfce, lxde, spin, de, converter, text, charset, chardetect, iconv

CHARDETECT / ICONV: Определение и переконвертирование кодировки текстового файла в консоли

INTRO

Исследовал тему и создал небольшое руководство - себе на заметку; рано или поздно оно пригодится.

NOTE

Предположим, что имеется файл с неизвестной кодовой страницей (на самом деле, это "правильный" текст UTF-8, содержащий все символы английского и русского языка).

Просмотрим его содержимое:

cat unknown_codepage.txt

1234567890-=
qwertyuiop[]\
asdfghjkl;'
zxcvbnm,./

!@#$%^&*()_+
йцукенгшщзхъ\
фывапролджэ
ячсмитьбю.

Определим кодовую страницу исходного файла:

chardetect unknown_codepage.txt

unknown_codepage.txt: utf-8 with confidence 0.99

Примечание: Достоверность результата: 0.99.

Просмотрим список (и правильные названия) всех кодовых страниц, поддерживаемых утилитой iconv:

iconv --list

Следующий список содержит все известные встроенные кодировки. Это не
обязательно означает, что можно использовать любые комбинации данных
имён в параметрах командной строки FROM и TO. Одна и та же кодировка
может быть указана под несколькими именами (псевдонимами).

  437, 500, 500V1, 850, 851, 852, 855, 856, 857, 858, 860, 861, 862, 863, 864,
  865, 866, 866NAV, 869, 874, 904, 1026, 1046, 1047, 8859_1, 8859_2, 8859_3,
  8859_4, 8859_5, 8859_6, 8859_7, 8859_8, 8859_9, 10646-1:1993,
  10646-1:1993/UCS4, ANSI_X3.4-1968, ANSI_X3.4-1986, ANSI_X3.4,
  ANSI_X3.110-1983, ANSI_X3.110, ARABIC (...)

Переконвертируем исходный файл в WINDOWS-1251 (кириллическая кодировка: старые версии Windows)

iconv -f UTF-8 -t WINDOWS-1251 unknown_codepage.txt > CP-1251_output.txt

где

-f ENCODING - предполагаемая кодировка исходного файла;

-t ENCODING - кодировка конечного (результирующего) файла.

Определим кодовую страницу полученного файла:

chardetect CP-1251_output.txt

CP-1251_output.txt: ISO-8859-8 with confidence 0.6881232062682825

ВАЖНО: chardetect НЕТОЧНО определила кодировку полученного файла, пометив его как "Latin/Hebrew alphabet" (с достоверностью всего 0.6 от единицы).

Просмотрим содержимое полученного файла:

cat CP-1251_output.txt 
1234567890-=
qwertyuiop[]\
asdfghjkl;'
zxcvbnm,./

ДАЛЕЕ СЛЕДУЕТ НЕПРАВИЛЬНО ОТОБРАЖАЕМОЕ СОДЕРЖИМОЕ
(...)

Примечание: Консоль GNU/Linux работает в кодировке UTF-8, поэтому, что естественно, некорректно отображает переконвертированные кириллические символы.

Однако если открыть полученный файл в любом GUI-редакторе, например GEdit или Gnome-text-editor, то кириллические символы тоже могут выглядеть весьма прискорбно:

(...)
!@#$%^&*()_+
éöóêåíãøùçõú\
ôûâàïðîëäæý
ÿ÷ñìèòüáþ.

Что произошло? Как правило, текстовые редакторы имеют функцию автоопределения, крайне некорректно подбирающую "правильную" кодовую страницу (см. аналогичную ошибку chardetect выше). Но если открыть полученный файл следующим образом: "Открыть" - "Кодировка Символов" - "Кириллица WINDOWS-1251", то все отобразится адекватно.

Чтобы убедиться в правильности перекодировки между кодовыми страницами, осуществим обратную операцию, принудительно указав кодировку WINDOWS-1251 у файла CP-1251_output.txt (предварительно скопируем его в новый файл - input.txt) и UTF-8 - у конечного файла (назовем его output.txt).

cp CP-1251_output.txt input.txt

'CP-1251_output.txt' -> 'input.txt'

iconv -f WINDOWS-1251 -t UTF-8 input.txt > output.txt

Проверим кодировку полученного "обратного" файла:

chardetect output.txt

output.txt: utf-8 with confidence 0.99

Проверим - правильно ли отображаются кириллические символы в файле:

cat output.txt

1234567890-=
qwertyuiop[]\
asdfghjkl;'
zxcvbnm,./

!@#$%^&*()_+
йцукенгшщзхъ\
фывапролджэ
ячсмитьбю.

Дополнительно см.: man chardetect; man iconv

₪ Back to home ₪

🄯 Rami Rosenfeld, 2024. GNU FDL 1.3.