Основные понятия кодировочных систем
Преобразование кодировки символов включает преобразование между внутренним представлением символов, используемым в Emacs, и некоторой другой кодировкой. Emacs поддерживает множество различных кодировок, в которые он может преобразовывать данные и из которых может их преобразовывать. Например, он может преобразовывать текст в кодировки Latin 1, Latin 2, Latin 3, Latin 4, Latin 5 и несколько вариантов ISO 2022 и обратно. В некоторых случаях Emacs поддерживает несколько альтернативных кодировок для одних и тех же символов; например, для кириллического (русского) алфавита существуют три кодировочные системы: ISO, Alternativnyj и KOI8.
Каждая кодировочная система задаёт определённый набор преобразований кодов символов, но кодировочная система undecided является особой: она не задаёт выбор кодировки, чтобы для каждого файла или строки его можно было определить эвристически на основе данных файла или строки при декодировании или кодировании. Кодировочная система prefer-utf-8 похожа на undecided, но по возможности предпочитает выбирать utf-8.
В общем случае кодировочная система не гарантирует идентичность при обратном преобразовании: декодирование последовательности байтов с помощью кодировочной системы, а затем кодирование полученного текста с помощью той же системы может дать другую последовательность байтов. Однако некоторые кодировочные системы гарантируют, что последовательность байтов останется такой же, как исходно декодированная. Вот несколько примеров:
iso-8859-1, utf-8, big5, shift_jis, euc-jp
Кодирование текста буфера, а затем декодирование результата также может не восстановить исходный текст. Например, если закодировать символ с помощью кодировочной системы, которая его не поддерживает, результат будет непредсказуемым, поэтому его декодирование с помощью той же кодировочной системы может дать другой текст. В настоящее время Emacs не может сообщать об ошибках, возникающих при кодировании неподдерживаемых символов.
Преобразование конца строки обрабатывает три соглашения, используемых в различных системах для представления конца строки в файлах. В соглашении Unix, используемом в системах GNU и Unix, а также в macOS, применяется символ перевода строки (также называемый символом новой строки). В соглашении DOS, используемом в системах MS-Windows и MS-DOS, применяются возврат каретки и перевод строки. В соглашении Mac, используемом в классической Mac OS и ныне редко встречающемся за пределами устаревшего программного обеспечения, применяется только возврат каретки.
Базовые кодировочные системы, такие как latin-1, не задают преобразование конца строки, чтобы его можно было определить на основе данных. Вариантные кодировочные системы, такие как latin-1-unix, latin-1-dos и latin-1-mac, также явно задают преобразование конца строки. Большинство базовых кодировочных систем имеют три соответствующих варианта, названия которых образуются добавлением ‘-unix’, ‘-dos’ и ‘-mac’.
Кодировочная система raw-text является особой: она предотвращает преобразование кодов символов и обеспечивает, чтобы буфер, открытый с этой кодировочной системой, был однобайтным. По историческим причинам с помощью этой кодировочной системы можно сохранять как однобайтный, так и многобайтный текст. При использовании raw-text для кодирования многобайтного текста всё же выполняется одно преобразование кодов символов: восьмибитные символы преобразуются в их внешнее однобайтное представление. raw-text не задаёт преобразование конца строки, поэтому оно определяется обычным образом на основе данных; у этой системы есть три стандартных варианта, задающих преобразование конца строки.
no-conversion (и её псевдоним binary) эквивалентна raw-text-unix: она не задаёт преобразование ни кодов символов, ни конца строки.
Кодировочная система utf-8-emacs указывает, что данные представлены во внутренней кодировке Emacs (см. Представления текста). Она похожа на raw-text тем, что преобразование кодов не выполняется, но отличается тем, что результатом являются многобайтные данные. Название emacs-internal является псевдонимом для utf-8-emacs-unix (поэтому оно отключает преобразование конца строки, в отличие от utf-8-emacs, которая может декодировать все 3 вида соглашений о конце строки). Поскольку эта кодировочная система может представлять все символы, поддерживаемые Emacs в его буферах и строках, мы рекомендуем использовать её при сохранении текста для внутренних целей, например для кэширования.
- Функция: coding-system-get coding-system property
-
Эта функция возвращает указанное свойство кодировочной системы coding-system. Большинство свойств кодировочных систем предназначены для внутреннего использования, но одно из них может быть полезно:
:mime-charset. Значение этого свойства — название кодировки символов, используемое в MIME, которую эта кодировочная система может читать и записывать. Примеры:(coding-system-get 'iso-latin-1 :mime-charset) ⇒ iso-8859-1 (coding-system-get 'iso-2022-cn :mime-charset) ⇒ iso-2022-cn (coding-system-get 'cyrillic-koi8 :mime-charset) ⇒ koi8-rЗначение свойства
:mime-charsetтакже определено как псевдоним кодировочной системы.
- Функция: coding-system-aliases coding-system
Эта функция возвращает список псевдонимов кодировочной системы coding-system.
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Coding-System-Basics.html