some notes on the use of charsets with ISIS

what are charsets?

Since computers can store nothing but numbers, but we want them to store characters, there has to a table telling which character is stored as which number, or, vice versa, which number is to display and print as which character. such tables are called charsets. Since the smallest unit of number storage is a byte, which can hold 256 different numbers from 0 to 255, many charsets are based on one byte and thus can hold up to 256 characters. such charsets are called one-byte-charsets . For many scripts, like the various versions of latin, greek, cyrillic, hebrew and arabic, 256 characters are more than enough. For others, namely chinese, japanese and korean ( CJK ) scripts with several thousand characters, it's not enough. The modern vietnamese script is based on latin letters but needs a vast amount of accented letters, so 256 isn't enough. Those scripts don't get by with one byte per character, so they need multi-byte-charsets, where two or more bytes are needed to encode one character.

what is UNICODE

UNICODE is a big multi-byte-charset designed to include all characters needed in the world (over 40.000 by now), even for some ancient languages. The problems having several charsets are a) you have to know which charset is used in a given text, b) computer systems need to be aware of all possible charsets and c) it's not possible to have a text or database contain characters which are encoded in different charsets. Having all text in unicode solves those problems. Check out this sample page - with a 21st century browser like Mozilla 5 (Netscape 6) you will see most or all of the letters.

ASCII-compatible charsets and encodings

Many charsets use the numbers 0 to 127 in the same way: to represent the basic set of latin characters defined by ASCII . Whenever there's a byte with a number in that range, this byte has the meaning of the corresponding ASCII-character. For example, the number 43 always is a plus sign +, which is important if a query expression is scanned for such characters. All ISO-8859-x charsets are ASCII-compatible. Older Cyrillic charsets are NOT compatible with ASCII. Some of the eastern multi-byte-charsets are, some are not. Some of the multi-byte-charsets have different encodings, that is, there is only one table mapping numbers to letters, but distinct ways to use multiple bytes to express such a number, some of which use the numbers in the ASCII-range only for ASCII characters, others don't. UNICODE has two widely used encodings, UTF-8 and UTF-16 (UCS-2). UTF-8 is ASCII-compatible, UTF-16 is not.

so what about ISIS

  • the ISIS database format itself is capable of storing anything and thus can store text in any charset/encoding. tools like biremes mx may store and retrieve (by MFN) text in nearly any encoding (but depending on how the programming is done, UTF-16 may not work because it may use bytes with value 0).
  • the ISIS query and formatting language depends on special ASCII-characters having special meaning and therefore will require an ASCII-compatible encoding. All the ISO-8859-x charsets will do as will UTF-8 encoded unicode (although some care must be taken when multiple bytes representing one character are cut off in the midth). At least in theory, mx and wwwisis are able to search for records in any ASCII-compatible encoding including UTF-8 unicode (given carefull web-programming).
  • winisis doesn't know about the possibility of one character having multiple bytes. It will work with any ASCII-compatible one-byte-charset , as long as it doesn't have to know what it does. That is, if your computer has some preferred charset installed, you will see all characters displayed according to that charset, and a character possibly entered as the german could show up as greek delta :). No support for multi-byte-charsets, especially not unicode.
  • Like any Java software,
    JavaISIS is - in theory - able to handle unicode characters and even to do the transformation between unicode and most of the other charsets. Some limitations may result from the underlying wwwisis. In practice, version 3.5 claims to give "Multi-language encoding support", but unfortunately it's in beta since March 2001 (sources made available in Feb 2002).
  • openisis supports any charset and with it's Java-binding, especially unicode and all the conversions. openisis alone can do it on the web, and in combination with JavaISIS (once new sources are available) also with a winisis-like interface.

some other resources on unicode

To see all those characters, you need fonts to tell your display or printer how they look like. Here's a very fine page on how to acquire and install those fonts (and some more advice). James Kass has a long list of high quality links related to Unicode. If you for some reason have to waste your time with M$ products, you may want to check out this page . There was a one-size(23 MB)-fits-all fat font Arial Unicode MS but it's no longer freely available, only supplied with newer Windoze and/or Ophice versions.

See statistics about how characters are distributed amongth Unicode. For example, the only scripts using uppercase/lowercase are those derived from Greek (i.e. Latin, Cyrillic, Armenian and Georgian).

The I18Nguy maintains a great switchboard on a lot of internationalization ("I18N") issues including character sets.

$Id: Unicode.txt,v 1.4 2004/06/10 11:10:06 kripke Exp $