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 (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 всегда обрабатывается как символ NUL , чтобы обеспечить максимальную совместимость кода с существующими программными библиотеками, работающими со строками, заканчивающимися нулем [1] , во многих языках программирования, таких как C . [a] Это относится даже к кодам UTF-16be, где кодовые слова с формой xx00 hex сопоставляются с кодами частного использования с формой F6xx hex во время кодирования, чтобы избежать использования байтов NUL, [7] и чтобы экранированные управляющие символы, где 20 шестнадцатеричных символов добавляются к управляющим символам C0 (но не C1), следующим за начальным шестнадцатеричным байтом 0F. [7]
Кодовые точки от 01 hex до 1F hex , которые служат управляющими кодами в ASCII, используются в качестве ведущих байтов для переключения определения кодовых точек выше 7F hex между несколькими кодовыми группами (аналогично кодовым страницам ) и в то же время определяют либо одну - или многобайтовый характер для соответствующей кодовой группы. [1]
Например, кодовая группа 1 (с групповым байтом 01 hex ) [1] почти идентична кодовой странице 850 SBCS , тогда как кодовая группа 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]
Дефолт | Группа | Байты | Описание |
---|---|---|---|
Н/Д | 00 шестнадцатеричный | 1 [7] | НУЛ |
LMBCS-1 | 01 шестнадцатеричный | 2 [7] | Кодовая страница 850 (DOS Latin-1) [2] [7] |
LMBCS-2 | 02 шестнадцатеричный | 2 [7] | Кодовая страница 851 (DOS греческий) [2] [7] |
LMBCS-3 | 03 шестнадцатеричный | 2 [7] | Кодовая страница 1255 (иврит для Windows) [2] [7] |
ЛМБКС-4 | 04 шестнадцатеричный | 2 [7] | Кодовая страница 1256 (Windows Arabic) [2] [7] |
ЛМБКС-5 | 05 шестнадцатеричный | 2 [7] | Кодовая страница 1251 (кириллица Windows) [2] [7] |
ЛМБКС-6 | 06 шестнадцатеричный | 2 [7] | Кодовая страница 852 (DOS Latin-2) [2] [7] |
Н/Д | 07 шестнадцатеричный | 1 [7] | БЕЛ [2] |
ЛМБКС-8 | 08 шестнадцатеричный | 2 [7] | Кодовая страница 1254 (Windows Turkish) [2] [9] [7] |
Н/Д | 09 шестнадцатеричный | 1 [7] | ВКЛАДКА [2] [9] [7] |
Н/Д | 0A шестнадцатеричный | 1 [7] | НЧ [2] [9] [7] |
ЛМБКС-11 | 0B шестнадцатеричный | 2 [7] | Кодовая страница 874 (тайский) [9] [7] |
(ЛМБКС-12) | 0C шестнадцатеричный | 2 [7] | Зарезервировано [2] |
Н/Д | 0D шестнадцатеричный | 1 [7] | КР [2] [9] [7] |
(ЛМБКС-14) | 0E шестнадцатеричный | 2 [7] | Зарезервировано [2] |
(ЛМБКС-15) | 0F шестнадцатеричный | 2 [7] | Переназначены управляющие коды C0/C1 [7] |
ЛМБКС-16 | 10 гекс | 3 [7] | Кодовая страница 932 / [2] 943 [7] (японский / Shift-JIS) [2] [9] |
ЛМБКС-17 | 11 гекс | 3 [7] | Кодовая страница 949 / [2] 1261 [7] (корейский) [2] [9] |
ЛМБКС-18 | 12 гекс | 3 [7] | Кодовая страница 950 [2] [7] (традиционный китайский / Тайвань / Big5 ) [2] [9] |
ЛМБКС-19 | 13 гекс | 3 [7] | Кодовая страница 936 / [2] 1386 [7] (упрощенный китайский) [2] [9] |
(ЛМБКС-20) | 14 гекс | 3 [7] | UTF-16 ( Юникод ) [2] [3] [7] |
Н/Д | 15 гекс | 3 | Зарезервировано [2] |
Н/Д | 16 гекс | 3 | Зарезервировано [2] |
Н/Д | 17 гекс | 3 | Зарезервировано [2] |
Н/Д | 18 гекс | 3 | Зарезервировано [2] |
Н/Д | 19 гекс | 1 [7] | Системный диапазон Lotus 1-2-3 [9] [7] |
Н/Д | 1А шестигранник | 3 | Зарезервировано [2] |
Н/Д | 1B шестнадцатеричный | 3 | Зарезервировано [2] |
Н/Д | 1С шестнадцатеричный | 3 | Зарезервировано [2] |
Н/Д | 1D шестигранник | 3 | Зарезервировано [2] |
Н/Д | 1E шестнадцатеричный | 3 | Зарезервировано [2] |
Н/Д | 1F шестнадцатеричный | 3 | Зарезервировано [2] |
Без префиксного байта кодовые точки от 32 (20 шестнадцатеричный ) до 127 (7F шестнадцатеричный ) интерпретируются следующим образом (соответствует кодам LMBCS от 32 до 127):
Однобайтовые коды ( ASCII / ISO-646-US [10] ) | ||||||||||||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | А | Б | С | Д | Е | Ф | |
2x | СП | ! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / |
3x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | знак равно | > | ? |
4x | @ | А | Б | С | Д | Е | Ф | г | ЧАС | я | Дж | К | л | М | Н | О |
5x | п | Вопрос | р | С | Т | U | В | Вт | Икс | Д | Z | [ | \ | ] | ^ | _ |
6x | ` | а | б | с | г | е | ф | г | час | я | Дж | к | л | м | н | о |
7x | п | д | р | с | т | ты | в | ж | Икс | у | г | { | | | } | ~ | ДЕЛ / ⌂ |
Кодовые точки LMBCS группы 1 от 128 (80 шестнадцатеричный ) до 255 (FF шестнадцатеричный ) идентичны соответствующим кодовым точкам в кодовой странице 850 (DOS Latin-1), тогда как кодовые точки от 1 (01 шестнадцатеричный ) до 127 (7F шестнадцатеричный ) определены согласно следующему списку исключений (соответствует кодам LMBCS с 256 по 383):
LMBCS Группа 1, нижняя половина [11] [10] | ||||||||||||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | А | Б | С | Д | Е | Ф | |
0x | НУЛ | ☺ | ☻ | ♥ | ♦ | ♣ | ♠ | • | ◘ | ○ | ◙ | ♂ | ♀ | ♪ | ♫ | ☼ |
1x | ► | ◄ | ↕ | ‼ | ¶ | § | ▬ | ↨ | ↑ | ↓ | → | ← | ∟ | ↔ | ▲ | ▼ |
2x | ¨ | ~ | ˚ | ^ | ` | ´ | “ | ' | … | - [б] | — | ' [с] | ' [с] | ‹ | › | |
3x | ¨ [д] | ~ [д] | ˚ [д] | ^ [д] | ` [д] | ´ [д] | „ | ‚ | ” | ‗ | NBSP[с] | [с] | ||||
4x | О | œ | Ÿ | ˙ [с] | ˚ [с] [д] | ╞ | ╟ | ▌ | ▐ | ◊ [с] | ⌘ [с] | [с] | [с] | Ом [с] | ||
5x | ì | ╤ | ╥ | ╙ | ╘ | ╒ | ╓ | ╫ | ╪ | ╡ | ╢ | ╖ | ╕ | ╜ | ╛ | ╧ |
6x | я | IJ | фи | | ʼn | ŀ | Ŀ | ¯ [с] | ˘ [с] | ˝ [с] | ˛ [с] | ˇ [ с] | ~ [с] [д] | ^ [с] [д] | ||
7x | † | ‡ | Ħ [с] | ħ [с] | Ŧ [с] | ŧ [с] | ™ | ℓ | Ŋ [с] | ŋ [с] | ĸ [с] | Кр [э] | ⌐ | ₤ | ₧ |
Кодовые точки LMBCS группы 2 от 128 (80 шестнадцатеричный ) до 255 (FF шестнадцатеричный ) идентичны соответствующим кодовым точкам в кодовой странице 851 (греческий язык DOS), тогда как кодовые точки от 1 (01 шестнадцатеричный ) до 127 (7F шестнадцатеричный ) определяются в соответствии с следующий список исключений: [f]
LMBCS Группа 2, нижняя половина [11] | ||||||||||||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | А | Б | С | Д | Е | Ф | |
0x | НУЛ | ͺ | ΅ | Ϊ | Ϋ | ― | ΄ | ʼ | ʽ | ‾ | | | ||||
1x | | | ⇕ | ⅞ | ⅝ | ⅜ | ⅛ | | ⇑ | ⇓ | ⇒ | ⇐ | | ⇔ | | |
2x | | | | | | | | | | | | | | | | |
3x | | | | | | | | | | | | | | | | |
4x | ∠ | ∇ | | | | | | | | | | | | | | |
5x | ∂ | ℵ | ℑ | ℜ | | | | | | | | ∋ | е | ∉ | ⊆ | ⊇ |
6x | ⊗ | ⊕ | ✓ | ⋀ | ∁ | ∫ | ∀ | ∃ | | ′ | ″ | ∞ | ∝ | ф | ∪ | ∩ |
7x | ≡ | ≅ | ≥ | ≤ | ⌠ | ⌡ | ≠ | ≈ | ⁄ | ∙ | ‰ | √ | ⁿ | ∅ | ⊂ | ⊃ |
Кодовые точки LMBCS группы 6 от 128 (80 шестнадцатеричный ) до 255 (FF шестнадцатеричный ) идентичны соответствующим кодовым точкам в кодовой странице 852 (DOS Latin-2), тогда как кодовые точки от 1 (01 шестнадцатеричный ) до 127 (7F шестнадцатеричный ) определены согласно следующему списку исключений: [f]
LMBCS Группа 6, нижняя половина [11] | ||||||||||||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | А | Б | С | Д | Е | Ф | |
0x | НУЛ | а | Ĉ | Э | Ċ | ċ | Э | Э | Э | Э | Г | г | Г | г | Г | г |
1x | ЧАС | час | Я | я | Я | я | Я | я | Ĵ | ĵ | Ķ | ķ | Ļ | ļ | Ņ | ņ |
2x | О | о | Р | р | О | ш | Ũ | ũ | Ū | ū | Ŭ | ŭ | Ų | ų | А | |
3x | ||||||||||||||||
4x | ||||||||||||||||
5x | ||||||||||||||||
6x | ||||||||||||||||
7x |
В целях оптимизации групповой байт опущен в примечаниях для однобайтовых значений между X'20' и X'FF'. Например, LMBCS всегда оптимизирован для группы 0x01, что означает, что любой символ, первый байт которого больше 0x1F, имеет неявный групповой байт 0x01.
[…] Notes использует единый набор символов, многобайтовый набор символов Lotus (LMBCS), для кодирования всех текстовых данных, используемых внутри его программ. Всякий раз, когда Notes впервые вводит текст, закодированный в наборе символов, отличном от LMBCS, он переводит текст в строку LMBCS, а всякий раз, когда необходимо вывести текст в наборе символов, отличном от LMBCS, он переводит внутреннюю строку LMBCS в соответствующий набор символов. Поскольку весь текст форматируется внутри LMBCS, все операции по обработке текста […] выполняются только одним способом. LMBCS использует до трех байтов в памяти для представления одного текстового символа […]