Spec-Zone.ru › Elisp

Основные понятия кодировочных систем

Преобразование кодировки символов включает преобразование между внутренним представлением символов, используемым в 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API