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, заключается в использовании символа перевода строки (также называемого новой строкой). Соглашение DOS, используемое в системах MS-Windows и MS-DOS, заключается в использовании возврата каретки и перевода строки в конце строки. Соглашение Mac заключается в использовании только возврата каретки. (Это было соглашение, используемое в Classic 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 вида соглашений о конце строки).

Функция: coding-system-get свойство системы кодирования

Эта функция возвращает указанное свойство системы кодирования 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.

Copyright © 1990-1996, 1998-2022 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