El Lotus Multi-Byte Character Set ( LMBCS ) es una codificación de caracteres multibyte patentada concebida originalmente en 1988 en Lotus Development Corporation con la colaboración de Bob Balaban y otros. [1] Creado aproximadamente al mismo tiempo y abordando algunos de los mismos problemas, LMBCS podría considerarse un desarrollo paralelo y una posible alternativa a Unicode . [1] Para lograr la máxima compatibilidad, las ediciones posteriores de LMBCS incorporan UTF-16 como un subconjunto. [2] [3]
Comercialmente, LMBCS se introdujo por primera vez como el conjunto de caracteres predeterminado de Lotus 1-2-3 Release 3 para DOS en marzo de 1989 [1] [4] y Lotus 1-2-3/G Release 1 para OS/2 [1] en 1990, reemplazando el Lotus International Character Set (LICS) de 8 bits y el ASCII utilizado en versiones anteriores solo para DOS de Lotus 1-2-3 y Symphony . [5] LMBCS también se utiliza en IBM / Lotus SmartSuite , Notes y Domino , [1] así como en varios productos de terceros.
LMBCS codifica los caracteres necesarios para los idiomas que utilizan los sistemas de escritura latino , [6] árabe , hebreo , griego y cirílico [6] , tailandés , chino , japonés [6] y coreano , y símbolos técnicos.
Técnicamente, LMBCS es una codificación de byte inicial donde el punto de código 00 hexadecimal así como los puntos de código 20 hexadecimal (32) a 7F hexadecimal (127) son idénticos a ASCII [1] (así como a LICS). [5]
El punto de código 00 hex siempre se trata como un carácter NUL para garantizar la máxima compatibilidad del código con las bibliotecas de software existentes que tratan con cadenas terminadas en nulo [1] en muchos lenguajes de programación como C. [a] Esto se aplica incluso a los códigos UTF-16be, donde las palabras de código con la forma xx00 hex se asignan a códigos de uso privado con la forma F6xx hex durante la codificación para evitar el uso de bytes NUL, [7] y a los caracteres de control escapados, donde se agrega 20 hex a los caracteres de control C0 (pero no C1) después del byte inicial hexadecimal 0F . [7]
Los puntos de código 01 hex a 1F hex , que sirven como códigos de control en ASCII, se utilizan como bytes principales para cambiar la definición de los puntos de código por encima de 7F hex entre varios grupos de códigos (similar a las páginas de códigos ) y al mismo tiempo determinar una naturaleza de uno o varios bytes para el grupo de códigos correspondiente. [1]
Por ejemplo, el grupo de códigos 1 (con byte de grupo 01 hexadecimal ) [1] es casi idéntico a la página de códigos SBCS 850 , mientras que el grupo de códigos 16 (con byte de grupo 10 hexadecimal ) [1] es similar a la página de códigos MBCS japonesa 932. Por lo tanto, los caracteres multibyte pueden ocupar dos o tres bytes. [7] [6]
En LMBCS canónico , cada carácter comienza con su byte de grupo. [1] Para reducir la longitud, en LMBCS optimizado o comprimido, se puede definir un grupo de códigos predeterminado o un código de grupo de optimización por aplicación o proceso (idealmente elegido de acuerdo con la mayor probabilidad de ocurrencia) [1] y debe comunicarse al código de interpretación de alguna manera (por ejemplo, especificando el nombre "LMBCS- n " correspondiente). [8] De este modo, se puede omitir el byte de grupo para estos caracteres. [1] Lotus 1-2-3 recupera el código de grupo de optimización del encabezado del archivo del archivo fuente correspondiente, [7] mientras que para Lotus Notes el código de grupo de optimización está fijado para que sea siempre 01 hex . [2] [7]
Sin el byte de prefijo, los puntos de código 32 (20 hexadecimal ) a 127 (7F hexadecimal ) se interpretan de la siguiente manera (correspondientes a los códigos LMBCS 32 a 127):
Los puntos de código del grupo 1 de LMBCS 128 (80 hex ) a 255 (FF hex ) son idénticos a los puntos de código correspondientes en la página de códigos 850 (DOS Latin-1), mientras que los puntos de código 1 (01 hex ) a 127 (7F hex ) se definen de acuerdo con la siguiente lista de excepciones (correspondiente a los códigos LMBCS 256 a 383):
Los puntos de código del grupo 2 de LMBCS 128 (80 hex ) a 255 (FF hex ) son idénticos a los puntos de código correspondientes en la página de códigos 851 (griego DOS), mientras que los puntos de código 1 (01 hex ) a 127 (7F hex ) se definen de acuerdo con la siguiente lista de excepciones: [f]
Los puntos de código del grupo 6 de LMBCS 128 (80 hex ) a 255 (FF hex ) son idénticos a los puntos de código correspondientes en la página de códigos 852 (DOS Latin-2), mientras que los puntos de código 1 (01 hex ) a 127 (7F hex ) se definen de acuerdo con la siguiente lista de excepciones: [f]
Para fines de optimización, el byte de grupo se omite en
las Notas
para los valores de un solo byte entre X'20' y X'FF'. Por ejemplo, LMBCS siempre está optimizado para el grupo 0x01, lo que significa que cualquier carácter donde el primer byte sea mayor que 0x1F, tiene un byte de grupo implícito de 0x01.
[…] Notes utiliza un único conjunto de caracteres, el Lotus Multibyte Character Set (LMBCS), para codificar todos los datos de texto utilizados internamente por sus programas. Siempre que Notes introduce por primera vez texto codificado en un conjunto de caracteres distinto de LMBCS, traduce el texto en una cadena LMBCS y, siempre que debe generar texto en un conjunto de caracteres distinto de LMBCS, traduce la cadena LMBCS interna al conjunto de caracteres adecuado. Debido a que todo el texto está formateado internamente por LMBCS, todas las operaciones de procesamiento de texto […] se realizan de una sola manera. LMBCS utiliza hasta tres bytes en la memoria para representar un único carácter de texto […]