Книга: Linux программирование в примерах
13.4.2. Представления многобайтных символов
13.4.2. Представления многобайтных символов
Строки широких символов сохраняются на диске путем преобразования их в памяти в многобайтное представление набора символов с последующей записью в дисковый файл. Сходным образом, такие строки считываются с диска через низкоуровневый блочный ввод/вывод, а затем конвертируются в памяти из многобайтной версии в версию широких символов.
Многие описанные кодировки используют для представления многобайтных символов состояния регистра (shift states). Другими словами, в данном потоке байтов значения байтов представляют самих себя до тех пор, пока не встретится специальное управляющее значение. В этот момент интерпретация изменяется в соответствии с текущим состоянием регистра. Таким образом, одно и то же восьмибитовое значение может иметь два значения: одно для обычного состояния, без использования регистра, и другое для использования регистра. Предполагается, что правильно закодированные строки начинаются и заканчиваются с одним и тем же состоянием регистра.
Значительным преимуществом Unicode является то, что его представления являются самокорректирующимися; кодировки не используют состояния регистров, поэтому потеря данных в середине не может повредить последующим закодированным данным.
Первоначальные версии функций преобразования многобайтных символов в широкие и широких в многобайтные поддерживали закрытую копию состояния преобразования (например, состояние регистра, а также все остальное, что могло понадобиться) Такая модель ограничивает использование функции лишь одним видом преобразования в течение жизни программы. Примерами являются mblen()
(определение длины многобайтной строки), mbtowc()
(преобразование многобайтного символа в широкий), wctomb()
(преобразование широкого символа в многобайтный), mbstowcs()
(преобразование многобайтной строки в строку широких символов), wcstombs()
(преобразование строки широких символов в многобайтную строку).
Новые версии этих процедур называются повторно запускаемыми (restartable). Это означает, что код уровня пользователя сохраняет состояние преобразования в отдельном объекте типа mbstate_t
. Соответствующими примерами являются mbrlen()
, mbrtowc()
, wcrtomb()
, mbsrtowcs()
и wcsrtombs()
. (Обратите внимание на r
в их именах, это означает «restartable».)
- 2.1. Набор символов
- Имена объектов длиной 68 символов
- 1. Требования к табличной форме представления отношений
- Использование представления в виде таблицы данных
- Добавление и изменение представления списка
- Создание представления
- На сайтах вместо текста отображается непонятный набор символов
- В Adobe Acrobat Reader русский текст на экране читается нормально, а при печати получается текст из набора символов. Как...
- Наборы символов Firebird
- В полученных письмах вместо текста непонятный набор символов
- Практическая работа 31. Форматирование символов
- Две формы представления сетевого графика