Lotus Multi-Byte Character Set ( LMBCS ) — это фирменная кодировка многобайтовых символов, изначально задуманная в 1988 году в Lotus Development Corporation при участии Боба Балабана и других. [1] Созданная примерно в то же время и решающая некоторые из тех же проблем, LMBCS можно рассматривать как параллельную разработку и возможную альтернативу Unicode . [1] Для максимальной совместимости более поздние выпуски LMBCS включают UTF-16 в качестве подмножества. [2] [3]
В коммерческом плане LMBCS впервые был представлен как набор символов по умолчанию в Lotus 1-2-3 Release 3 для DOS в марте 1989 года [1] [4] и в Lotus 1-2-3/G Release 1 для OS/2 [1] в 1990 году, заменив 8-битный Lotus International Character Set (LICS) и ASCII, использовавшиеся в более ранних версиях Lotus 1-2-3 и Symphony только для DOS . [5] LMBCS также используется в IBM / Lotus SmartSuite , Notes и Domino , [1] а также в ряде сторонних продуктов.
LMBCS кодирует символы, необходимые для языков, использующих латинское [6] , арабское , еврейское , греческое и кириллическое [6] письмо, тайскую , китайскую , японскую [6] и корейскую письменности, а также технические символы.
Технически LMBCS представляет собой кодировку ведущих байтов, в которой кодовая точка 00 hex , а также кодовые точки от 20 hex (32) до 7F hex (127) идентичны ASCII [1] (а также LICS). [5]
Кодовая точка 00 hex всегда рассматривается как символ NUL для обеспечения максимальной совместимости кода с существующими библиотеками программного обеспечения, работающими со строками с нулевым завершением [1] во многих языках программирования , таких как C. [a] Это применимо даже к кодам UTF-16be, где кодовые слова с формой xx00 hex сопоставляются с кодами частного использования с формой F6xx hex во время кодирования, чтобы избежать использования байтов NUL, [7] и к экранированным управляющим символам, где 20 hex добавляется к управляющим символам C0 (но не C1) после ведущего байта 0F hex . [7]
Кодовые точки от 01 hex до 1F hex , которые служат управляющими кодами в ASCII, используются в качестве ведущих байтов для переключения определения кодовых точек выше 7F hex между несколькими кодовыми группами (аналогично кодовым страницам ) и в то же время определяют либо одно-, либо многобайтовую природу для соответствующей кодовой группы. [1]
Например, кодовая группа 1 (с групповым байтом 01 hex ) [1] почти идентична кодовой странице SBCS 850 , тогда как кодовая группа 16 (с групповым байтом 10 hex ) [1] похожа на японскую кодовую страницу MBCS 932. Таким образом, многобайтовые символы могут занимать два или три байта. [7] [6]
В каноническом LMBCS каждый символ начинается со своего группового байта. [1] Чтобы уменьшить длину, в оптимизированном или сжатом LMBCS группа кода по умолчанию или код группы оптимизации могут быть определены для каждого приложения или процесса (в идеале выбирается в соответствии с наибольшей вероятностью появления) [1] и должны быть сообщены интерпретирующему коду каким-либо образом (например, путем указания соответствующего имени "LMBCS- n "). [8] Таким образом, групповой байт для этих символов может быть опущен. [1] Lotus 1-2-3 извлекает код группы оптимизации из заголовка файла соответствующего исходного файла, [7] тогда как для Lotus Notes код группы оптимизации всегда фиксирован и равен 01 hex . [2] [7]
Без префиксного байта кодовые точки с 32 (20 hex ) по 127 (7F hex ) интерпретируются следующим образом (соответствуют кодам LMBCS с 32 по 127):
Кодовые точки группы LMBCS 128 (80 hex ) – 255 (FF hex ) идентичны соответствующим кодовым точкам в кодовой странице 850 (DOS Latin-1), тогда как кодовые точки 1 (01 hex ) – 127 (7F hex ) определяются в соответствии со следующим списком исключений (соответствующим кодам LMBCS 256–383):
Кодовые точки группы 2 LMBCS от 128 (80 hex ) до 255 (FF hex ) идентичны соответствующим кодовым точкам в кодовой странице 851 (DOS Greek), тогда как кодовые точки от 1 (01 hex ) до 127 (7F hex ) определяются в соответствии со следующим списком исключений: [f]
Кодовые точки группы 6 LMBCS от 128 (80 hex ) до 255 (FF hex ) идентичны соответствующим кодовым точкам в кодовой странице 852 (DOS Latin-2), тогда как кодовые точки от 1 (01 hex ) до 127 (7F hex ) определяются в соответствии со следующим списком исключений: [f]
В целях оптимизации групповой байт опущен в
примечаниях
для однобайтовых значений между X'20' и X'FF'. Например, LMBCS всегда оптимизируется для группы 0x01, что означает, что любой символ, где первый байт больше 0x1F, имеет неявный групповой байт 0x01.
[…] Notes использует один набор символов, Lotus Multibyte Character Set (LMBCS), для кодирования всех текстовых данных, используемых внутри его программ. Всякий раз, когда Notes впервые вводит текст, закодированный в наборе символов, отличном от LMBCS, он переводит текст в строку LMBCS, и всякий раз, когда он должен вывести текст в наборе символов, отличном от LMBCS, он переводит внутреннюю строку LMBCS в соответствующий набор символов. Поскольку весь текст внутренне форматируется LMBCS, все операции по обработке текста […] выполняются только одним способом. LMBCS использует до трех байтов в памяти для представления одного текстового символа […]