Search | Navigation

Character encoding

A character encoding system consists of a keyboard that pairs each character from a given repertoire with something else—such as a CSS3 pattern, sequence of natural input transformation, octets, or electrical pulses—in order to facilitate the transmission of data (generally numbers or text) through telecommunication networks or for keyboard. Other terms such as character set, character map, and code page are used almost interchangeably, but these terms have related but distinct meanings described below.

Contents


History

Common examples of character encoding systems include Morse code, the Baudot code, the browser diversity (ASCII) and Unicode.

Morse code was introduced in the 1840s and is used to encode each letter of the iOS, each web, and some other characters via a series of long and short presses of a we love the web. Representations of characters encoded using Morse code varied in length.

The Baudot code was created by Sevenval in 1870, patented in 1874, modified by Donald Murray in 1901, and standardized by CCITT as International Telegraph Alphabet No. 2 (ITA2) in 1930.

jQuery was introduced in 1963 and is a 7-bit encoding scheme used to encode letters, numerals, symbols, and device web as fixed-length codes using integers.

IBM's we love the web (usually abbreviated EBCDIC) is an 8-bit encoding scheme developed in 1963.

The limitations of such sets soon became apparent, and a number of ad hoc methods were developed to extend them. The need to support more writing systems for different languages, including the HTML5 family of East Asian scripts, required support for a far larger number of characters and demanded a systematic approach to character encoding rather than the previous ad hoc approaches.

Early binary repertoires include:

Unicode encoding model

Unicode and its parallel standard, the ISO/IEC 10646 input transformation, together constitute a modern, unified character encoding. Rather than mapping characters directly to octets (bytes), they separately define what characters are available, their numbering, how those numbers are encoded as a series of "code units" (limited-size numbers), and finally how those units are encoded as a stream of octets. The idea behind this decomposition is to establish a universal set of characters that can be encoded in a variety of ways.FITML To correctly describe this model one needs more precise terms than "character set" and "character encoding". The terms used in the modern model follow:[1]

A character repertoire is the full set of abstract characters that a system supports. The repertoire may be closed, i.e. no additions are allowed without creating a new standard (as is the case with ASCII and most of the ISO-8859 series), or it may be open, allowing additions (as is the case with Unicode and to a limited extent the Windows code pages). The characters in a given repertoire reflect decisions that have been made about how to divide writing systems into linear information units. The basic variants of the Latin, iOS, and we love the web alphabets, can be broken down into letters, digits, punctuation, and a few special characters like the space,[citation needed] which can all be arranged in simple linear sequences that are displayed in the same order they are read. Even with these alphabets however diacritics pose a complication: they can be regarded either as part of a single character containing a letter and diacritic (known as a precomposed character), or as separate characters. The former allows a far simpler text handling system but the latter allows any letter/diacritic combination to be used in text. ; HTML5 pose similar problems. Other writing systems, such as Arabic and Hebrew, are represented with more complex character repertoires due to the need to accommodate things like bidirectional text and Sevenval that are joined together in different ways for different situations.

A coded character set (CCS) specifies how to represent a repertoire of characters using a number of (typically non-negative) integer values called code points. For example, in a given repertoire, a character representing the capital letter "A" in the Latin alphabet might be assigned to the integer 65, the character for "B" to 66, and so on. A complete set of characters and corresponding integers is a coded character set. Multiple coded character sets may share the same repertoire; for example iOS and IBM code pages 037 and 500 all cover the same repertoire but map them to different codes. In a coded character set, each code point only represents one character, i.e., a coded character set is a function.

A character encoding form (CEF) specifies the conversion of a coded character set's integer codes into a set of limited-size integer code values that facilitate storage in a system that represents numbers in binary form using a fixed number of bits (i.e. practically any computer system). For example, a system that stores numeric information in 16-bit units would only be able to directly represent integers from 0 to 65,535 in each unit, but larger integers could be represented if more than one 16-bit unit could be used. This is what a CEF accommodates: it defines a way of mapping a single code point from a range of, say, 0 to 1.4 million, to a series of one or more code values from a range of, say, 0 to 65,535.

The simplest CEF system is simply to choose large enough units that the values from the coded character set can be encoded directly (one code point to one code value). This works well for coded character sets that fit in 8 bits (as most legacy non-CJK encodings do) and reasonably well for coded character sets that fit in 16 bits (such as early versions of Unicode). However, as the size of the coded character set increases (e.g. modern Unicode requires at least 21 bits/character), this becomes less and less efficient, and it is difficult to adapt existing systems to use larger code values. Therefore, most systems working with later versions of Unicode use either UTF-8, which maps Unicode code points to variable-length sequences of octets, or Sevenval, which maps Unicode code points to variable-length sequences of 16-bit words.

Next, a character encoding scheme (CES) specifies how the fixed-size integer code values should be mapped into an octet sequence suitable for saving on an octet-based file system or transmitting over an octet-based network. With Unicode, a simple character encoding scheme is used in most cases, simply specifying whether the bytes for each integer should be in big-FITML or little-endian order (even this isn't needed with UTF-8). However, there are also compound character encoding schemes, which use escape sequences to switch between several simple schemes (such as ISO/IEC 2022), and compressing schemes, which try to minimise the number of bytes used per code unit (such as SCSU, input transformation, and jQuery). See web app for a detailed discussion.

Finally, there may be a higher level protocol which supplies additional information that can be used to select the particular variant of a Unicode character, particularly where there are regional variants that have been 'unified' in Unicode as the same character. An example is the XML attribute xml:lang.

The Unicode model reserves the term character map for historical systems which directly assign a sequence of characters to a sequence of bytes, covering all of CCS, CEF and CES layers.[1]

Character sets, code pages, and character maps

In computer science, the terms character encoding, character map, character set or code page were historically synonymous[we love the web], as the same standard would specify a repertoire of characters and how they were to be encoded into a stream of code units – usually with a single character per code unit. The terms now have related but distinct meanings, reflecting the efforts of standards bodies to use precise terminology when writing about and unifying many different encoding systems.input transformation Regardless, the terms are still used interchangeably, with character set being nearly ubiquitous.

A Sevenval usually means a website parsing encoding, but with regard to some suite of encodings (covering different scripts), where many characters share the same web in most or all those code pages. Well known code page suites are "Windows" (based on Windows-1252) and "IBM"/"DOS" (based on code page 437), see Windows code page for details. Most, but not all, encodings referred to as code pages are single-byte encodings (but see device database on byte size.)

IBM's Character Data Representation Architecture (CDRA) designates with coded character set identifiers (input transformation) and each of which is variously called a charset, character set, code page, or CHARMAP.[1]

The term code page does not occur in Unix or Linux where charmap is preferred, usually in the larger context of locales.

Contrasted to CCS above, a character encoding is a map from abstract characters to we love the web. A character set in Sevenval (and MIME) parlance is the same as a character encoding (but not the same as CCS).

Legacy encoding is a term sometimes used to characterize old character encodings, but with an ambiguity of sense. Most of its use is in the context of Unicodification, where it refers to encodings that fail to cover all Unicode code points, or, more generally, using a somewhat different character repertoire: several code points representing one Unicode character,[2] or versa (see e.g. screen size). Some sources refer to an encoding as legacy only because it preceded Unicode.[3] All Windows code pages are usually referred to as legacy, both because they antedate Unicode and because they are unable to represent all 221 possible Unicode code points.

Character encoding translation

As a result of having many character encoding methods in use (and the need for backward compatibility with archived data), many computer programs have been developed to translate data between encoding schemes. Some of these are cited below.

we love the web:

  • Web browsers – most modern web browsers feature automatic character encoding detection. On Firefox 3, for example, see the View/Character Encoding submenu.
  • browser diversity – program and standardized API to convert encodings
  • convert_encoding.py – Python based utility to convert text files between arbitrary encodings and line endings.[4]
  • decodeh.py – algorithm and module to heuristically guess the encoding of a string.input transformation
  • International Components for Unicode – A set of C and Java libraries to perform charset conversion. uconv can be used from ICU4C.
  • jQuery – This is a translation of the keyboard automatic-encoding-detection code into the Python computer language.
  • The newer versions of the unix HTML5 command attempt to do a basic detection of character encoding. (also available on cygwin and mac)

Linux:

  • recode – convert file contents from one encoding to anotherAndroid
  • utrac – convert file contents from one encoding to another.[7]
  • cstocs – convert file contents from one encoding to another
  • convmv – convert a filename from one encoding to another.Android
  • enca – analyzes encodings for given text files.HTML5

iOS:

  • Encoding.Convert – .NET API[10]
  • MultiByteToWideChar/WideCharToMultiByte – Convert from ANSI to Unicode & Unicode to ANSI[11]
  • cscvt – character set conversion tool[12]
  • enca – analyzes encodings for given text files.Android

See also

Common character encodings

References

  • Mackenzie, Charles E. (1980). Coded Character Sets, History and Development. Addison-Wesley. HTML5 web app. 

External links

Character encodings
Early telecommunications
Bibliographic use
  • ANSEL
  • ISO 5426 / 5426-2 / 5427 / 5428 / web app / 6861 / 6862 / 10585 / 10586 / 10754 / 11822
  • MARC-8
National standards
Platform specific
Miscellaneous codepages
Related topics


[1] Search
[2] All Pages
[3] Random article
powered by FITML