Lotus Multi-Byte Character Set
The Lotus Multi-Byte Character Set (LMBCS) is a proprietary multi-byte character encoding originally conceived in 1988 at Lotus Development Corporation with input from Bob Balaban and others.[1] Created around the same time and addressing some of the same problems, LMBCS could be viewed as parallel development and possible alternative to Unicode.[1] For maximum compatibility, later issues of LMBCS incorporate UTF-16 as a subset.[2]
Commercially, LMBCS was first introduced as the default character set of Lotus 1-2-3 Release 3 for DOS in March 1989[1] and Lotus 1-2-3/G Release 1 for OS/2[1] in 1990 replacing the 8-bit Lotus International Character Set (LICS) and ASCII used in earlier DOS-only versions of Lotus 1-2-3 and Symphony. LMBCS is also used in IBM/Lotus SmartSuite, Notes and Domino.[1]
LMBCS encodes the characters required for languages using the Latin, Arabic, Hebrew, Greek and Cyrillic scripts, the Thai, Chinese, Japanese and Korean writing systems, and technical symbols.
Encodings
Technically, LMBCS is a lead-byte encoding where codepoint 00hex as well as codepoints 20hex (32) to 7Fhex (127) are identical to ASCII[1] (as well as to LICS).
Codepoint 00hex is always treated as NUL character to ensure maximum code compatibility with existing software libraries dealing with null-terminated strings[1] in many programming languages such as C.[nb 1]
Codepoints 01hex to 1Fhex, which serve as control codes in ASCII, are used as lead bytes to switch the definition of codepoints above 7Fhex between several code groups (similar to codepages) and at the same time determine either a single- or multi-byte nature for the corresponding code group.[1]
For example, code group 1 (with group byte 01hex)[1] is almost identical to the SBCS codepage 850, whereas code group 16 (with group byte 10hex)[1] is similar to the Japanese MBCS codepage 932. Multi-byte characters can thus occupy two, three or four bytes.[1]
In canonical LMBCS, each character starts with its group byte.[1] To reduce the length, in optimized or compressed LMBCS a default code group or optimization group code can be defined on a per application or process basis (ideally chosen according to the highest likelihood of occurrence)[1] and must be communicated to the interpreting code in some way (f.e. by specifying the corresponding "LMBCS-n" name). Thereby, the group byte can be omitted for these characters.[1] Lotus 1-2-3 retrieves the optimization group code from the file header of the corresponding source file, whereas for Lotus Notes the optimization group code is fixed to be always 01hex.[2]
Default | Group | Bytes | Description |
---|---|---|---|
N/A | 00hex | 1 | NUL |
LMBCS-1 | 01hex | 2 | Codepage 850 (DOS: Latin-1)[2] |
LMBCS-2 | 02hex | 2 | Codepage 851 (DOS: Greek)[2] |
LMBCS-3 | 03hex | 2 | Codepage 1255 (Windows: Hebrew)[2] |
LMBCS-4 | 04hex | 2 | Codepage 1256 (Windows: Arabic)[2] |
LMBCS-5 | 05hex | 2 | Codepage 1251 (Windows: Cyrillic)[2] |
LMBCS-6 | 06hex | 2 | Codepage 852 (DOS: Latin-2)[2] |
N/A | 07hex | 1 | BEL[2] |
LMBCS-8 | 08hex | 2 | Codepage 1254 (Windows: Turkish)[2][3] |
N/A | 09hex | 1 | TAB[2][3] |
N/A | 0Ahex | 1 | LF[2][3] |
LMBCS-11 | 0Bhex | 2 | Codepage 874 (Thai)[3] |
(LMBCS-12) | 0Chex | 2 | Reserved[2] |
N/A | 0Dhex | 1 | CR[2][3] |
(LMBCS-14) | 0Ehex | 2 | Reserved[2] |
(LMBCS-15) | 0Fhex | 2 | Remapped C0/C1 control codes |
LMBCS-16 | 10hex | 3 | Codepage 932/[2]943 (Japanese / Shift-JIS)[2][3] |
LMBCS-17 | 11hex | 3 | Codepage 949/[2]1261 (Korean)[2][3] |
LMBCS-18 | 12hex | 3 | Codepage 950[2] (Traditional Chinese / Taiwan / Big5)[2][3] |
LMBCS-19 | 13hex | 3 | Codepage 936/[2]1386 (Simplified Chinese)[2][3] |
(LMBCS-20) | 14hex | 3 | UTF-16 (Unicode)[2] |
N/A | 15hex | 3 | Reserved[2] |
N/A | 16hex | 3 | Reserved[2] |
N/A | 17hex | 3 | Reserved[2] |
N/A | 18hex | 3 | Reserved[2] |
N/A | 19hex | 1 | Lotus 1-2-3 system range[3] |
N/A | 1Ahex | 3 | Reserved[2] |
N/A | 1Bhex | 3 | Reserved[2] |
N/A | 1Chex | 3 | Reserved[2] |
N/A | 1Dhex | 3 | Reserved[2] |
N/A | 1Ehex | 3 | Reserved[2] |
N/A | 1Fhex | 3 | Reserved[2] |
See also
Notes
- ↑ Lotus 1-2-3 Release 3.0 for DOS and newer versions are written in C.
References
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Balaban, Bob (2001). "Multi-Language Character Sets - What They Are, How To Use Them" (PDF). Looseleaf Software, Inc. Archived (PDF) from the original on 2016-11-25. Retrieved 2016-11-25.
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 "Appendix A. Encoding Schemes". IBM Character Data Representation Architecture. IBM (CDRA). Lotus Multi-byte Character Set (LMBCS). Archived from the original on 2016-11-26. Retrieved 2016-11-26.
For optimization purposes, the group byte is omitted in Notes for single-byte values between X'20' and X'FF'. For example, LMBCS is always optimized to group 0x01, which means that any character where the first byte is greater than 0x1F, has an implicit group byte of 0x01.
- 1 2 3 4 5 6 7 8 9 10 "LMBCS" (in Japanese). 2009-02-03. Archived from the original on 2016-11-26. Retrieved 2016-11-26.
Further reading
- Born, Günter (December 2000). "Kapitel 2. LOTUS 1-2-3-Format (WK3)" [Chapter 2. Lotus 1-2-3 WK3 format]. Dateiformate - Eine Referenz - Tabellenkalkulation, Text, Grafik, Multimedia, Sound und Internet [File formats - a reference - spreadsheets, text, graphics, multimedia, sound and internet] (PDF) (in German). Bonn, Germany: Galileo Computing. ISBN 3-934358-83-7. Archived (PDF) from the original on 2016-11-28. Retrieved 2016-11-28. (Includes some information about LMBCS and Lotus system ranges.)
- ftp://ftp.lotus.com/desktop/LotusDoc/10955.txt
- ftp://ftp.software.ibm.com/ftp/desktop/LotusDoc/10954.txt
- https://fossies.org/dox/w32tex-src/ucnv__lmb_8c_source.html
- https://gitlab.q3df.org/megadaddeln/icu_chrome/blob/caccda5a040f058024da1c2d894f8914cfc40618/source/data/mappings/lmb-excp.ucm
- https://sourceforge.net/p/icu/mailman/message/7389276/
- http://unicode.org/mail-arch/unicode-ml/Archives-Old/UML022/1278.html
External links
- Berntrop-Bos, Lars (2014-07-10). "Blast from the past: LMBCS tables for Windows, OS/2, Unix and Macintosh". Archived from the original on 2017-11-26. Retrieved 2016-11-26.