Home Home  Article Index Article Index  
GuruPedia  

ASCII

ASCII (American Standard Code for Information Interchange, generally pronounced /"{ski/ (X-SAMPA)) is a character set and a character encoding based on the Roman alphabet as used in modern English and other Western European languages. It is most commonly used by computers and other communication equipment to represent text and by control devices that work with text.

Table of contents

Overview

Like other character representation computer codes, ASCII specifies a correspondence between digital bit patterns and the symbols/glyphs of a written language, thus allowing digital devices to communicate with each other and to process, store, and communicate character-oriented information. The ASCII character encoding, or a compatible extension (see below), is used on nearly all common computers, especially personal computers and workstations. The preferred MIME name for this encoding is "US-ASCII".

ASCII is, strictly, a seven-bit code, meaning that it uses the bit patterns representable with seven binary digits (a range of 0 to 127 decimal) to represent character information. At the time ASCII was introduced, many computers dealt with eight-bit groups (bytes or, more specifically, octets) as the smallest unit of information; the eighth bit was commonly used as a parity bit for error checking on communication lines or other device-specific functions. Machines which did not use parity typically set the eighth bit to zero, though some systems such as PRIME machines running PRIMOS set the eighth bit of ASCII characters to one.

ASCII does not specify any way to include information about the conceptual structure or appearance of a piece of text. That requires other standards, such as those specifying markup languages. Conceptual structure can be included using XML and appearance can be specified by using HTML for relatively simple things, SGML for more complex things, or PostScript, Display PostScript, or TeX for advanced layout and font control.

ASCII was first published as a standard in 1963 by the American Standards Association (ASA), which later became ANSI. There are many variations of ASCII, but its present, most widely-used form is ANSI X3.4-1986, also standardized as ECMA-6, ISO/IEC 646:1991 International Reference Version, ITU-T Recommendation T.50 (09/92), and RFC 20. It is embedded in its probable replacement, Unicode, as the 'lowest' 128 characters. ASCII is considered by some the most successful software standard ever promulgated.

Historically, ASCII developed from telegraphic codes and its first commercial use was as a 7-bit teleprinter code promoted by Bell data services. The Bell System had been planning to use a 6-bit code derived from Fieldata that added punctuation and lower-case letter to the earlier 5-bit Baudot teleprinter code but was persuaded to instead join the ASA subcommittee that was developing ASCII. Baudot helped in the automation of sending and receiving of telegraphic messages, and took many features from Morse code; it was however, a constant length code unlike Morse code. Compared to earlier telegraph codes, the proposed Bell code and ASCII were both reordered for more convenient sorting (ie, alphabetization) of lists, and added features for devices other than teleprinters. Some ASCII features, including the 'ESCape sequence', were due to Robert Bemer.

ASCII control characters

The first thirty-two codes (numbers 0-31 decimal) in ASCII are reserved for control characters: codes that were not originally intended to carry information, but rather to control devices (such as printers) that make use of ASCII. For example, character 10 represents the "line feed" function (which causes a printer to advance its paper), and character 27 represents the "escape" key found on the top left of common keyboards.

Code 127 (all seven bits on) is another special character known as "delete" or "rubout". Though its function is similar to that of other control characters, this pattern was used so that it could be used to "erase" a section of paper tape, a popular storage medium until the 80's, by punching all possible holes at a particular character position.

Many of the ASCII control codes are to mark data packets, or to control a data transmission protocol (i.e., ENQuiry (effectively, "any stations out there?"), ACKnowledge, Negative AcKnowledge, Start Of Header, Start Of Text, End Of Text, etc). ESCape and SUBstitute permit a communications protocol to, for instance, mark binary data so that if it contains codes with the same pattern as a protocol character, the code will be processed as data.

The separator characters (Record Separator, etc.) were intended for use with magnetic tape systems.

XON and XOFF are common interpretations of two of the Device Control characters and are generally used to throttle data flow to a slow device, such as a printer, from a fast device, such as a computer so data does not overrun and be lost.

Early users of ASCII adopted some of the control codes to represent "meta-information" such as end-of-line, start/end of a data element, and so on. These assignments often conflict, so part of the effort in converting data from one format to another is making the correct meta-information transformations. For example, the character(s) representing end-of-line ("new line") in text data files/streams vary from operating system to operating system. When moving files from one system to another, these characters must be recognized as end-of-line markers and converted appropriately.


Binary Decimal Hex Abbreviation Printable
Representation
Name/Meaning
0000 0000 0 00 NUL Null character
0000 0001 1 01 SOH Start of Header
0000 0010 2 02 STX Start of Text
0000 0011 3 03 ETX End of Text
0000 0100 4 04 EOT End of Transmission
0000 0101 5 05 ENQ Enquiry
0000 0110 6 06 ACK Acknowledgement
0000 0111 7 07 BEL Bell
0000 1000 8 08 BS Backspace
0000 1001 9 09 HT Horizontal Tab
0000 1010 10 0A LF Line feed
0000 1011 11 0B VT Vertical Tab
0000 1100 12 0C FF Form Feed
0000 1101 13 0D CR Carriage return
0000 1110 14 0E SO Shift Out
0000 1111 15 0F SI Shift In
0001 0000 16 10 DLE Data Link Escape
0001 0001 17 11 DC1 Device Control 1 -- oft. XON
0001 0010 18 12 DC2 Device Control 2
0001 0011 19 13 DC3 Device Control 3 -- oft. XOFF
0001 0100 20 14 DC4 Device Control 4
0001 0101 21 15 NAK Negative Acknowledgement
0001 0110 22 16 SYN Synchronous Idle
0001 0111 23 17 ETB End of Trans. Block
0001 1000 24 18 CAN Cancel
0001 1001 25 19 EM End of Medium
0001 1010 26 1A SUB Substitute
0001 1011 27 1B ESC Escape
0001 1100 28 1C FS File Separator
0001 1101 29 1D GS Group Separator
0001 1110 30 1E RS Record Separator
0001 1111 31 1F US Unit Separator
0111 1111 127 7F DEL Delete


In the table above, the fifth column contains glyphs reserved for representing control codes in a data stream, ie, when they must be printed or displayed rather than (or in addition to) causing action; your browser, (ie, your HTML user agent) may require the installation of additional fonts in order to display them.

ASCII printable characters

Code 32 is the "space" character, denoting the space between words, which is produced by the large space bar of a keyboard. Codes 33 to 126 are called the printable characters, which represent letters, digits, punctuation marks, and a few miscellaneous symbols.

Seven bit ASCII provided seven "national" characters and, if the combined hardware and software permit, can use overstrikes to simulate some additional international characters: a BackSpace can be followed with the grave accent (which the American and British standards, but only the American and British standards, also call "opening single quotation mark"), a tilde, or a breath mark (inverted vel).


Binary Decimal Hex Graphic
0010 0000 32 20 (blank) (␠)
0010 0001 33 21 !
0010 0010 34 22 "
0010 0011 35 23 #
0010 0100 36 24 $
0010 0101 37 25 %
0010 0110 38 26 &
0010 0111 39 27 '
0010 1000 40 28 (
0010 1001 41 29 )
0010 1010 42 2A *
0010 1011 43 2B +
0010 1100 44 2C ,
0010 1101 45 2D -
0010 1110 46 2E .
0010 1111 47 2F /
0011 0000 48 30 0
0011 0001 49 31 1
0011 0010 50 32 2
0011 0011 51 33 3
0011 0100 52 34 4
0011 0101 53 35 5
0011 0110 54 36 6
0011 0111 55 37 7
0011 1000 56 38 8
0011 1001 57 39 9
0011 1010 58 3A :
0011 1011 59 3B ;
0011 1100 60 3C <
0011 1101 61 3D =
0011 1110 62 3E >
0011 1111 63 3F ?
 
Binary Decimal Hex Graphic
0100 0000 64 40 @
0100 0001 65 41 A
0100 0010 66 42 B
0100 0011 67 43 C
0100 0100 68 44 D
0100 0101 69 45 E
0100 0110 70 46 F
0100 0111 71 47 G
0100 1000 72 48 H
0100 1001 73 49 I
0100 1010 74 4A J
0100 1011 75 4B K
0100 1100 76 4C L
0100 1101 77 4D M
0100 1110 78 4E N
0100 1111 79 4F O
0101 0000 80 50 P
0101 0001 81 51 Q
0101 0010 82 52 R
0101 0011 83 53 S
0101 0100 84 54 T
0101 0101 85 55 U
0101 0110 86 56 V
0101 0111 87 57 W
0101 1000 88 58 X
0101 1001 89 59 Y
0101 1010 90 5A Z
0101 1011 91 5B [
0101 1100 92 5C \
0101 1101 93 5D ]
0101 1110 94 5E ^
0101 1111 95 5F _
 
Binary Decimal Hex Graphic
0110 0000 96 60 `
0110 0001 97 61 a
0110 0010 98 62 b
0110 0011 99 63 c
0110 0100 100 64 d
0110 0101 101 65 e
0110 0110 102 66 f
0110 0111 103 67 g
0110 1000 104 68 h
0110 1001 105 69 i
0110 1010 106 6A j
0110 1011 107 6B k
0110 1100 108 6C l
0110 1101 109 6D m
0110 1110 110 6E n
0110 1111 111 6F o
0111 0000 112 70 p
0111 0001 113 71 q
0111 0010 114 72 r
0111 0011 115 73 s
0111 0100 116 74 t
0111 0101 117 75 u
0111 0110 118 76 v
0111 0111 119 77 w
0111 1000 120 78 x
0111 1001 121 79 y
0111 1010 122 7A z
0111 1011 123 7B {
0111 1100 124 7C |
0111 1101 125 7D }
0111 1110 126 7E ~


Note how uppercase characters can be converted to lowercase by adding 32 to their ASCII value; in binary, this can be accomplished simply by setting the sixth-least significant bit to 1.


One more time, here are all the characters in the ASCII set:

The following table shows the characters represented by ASCII, with each character followed by its code number (numeric value) in decimal ("d"), hex ("h"), and octal ("o"):

   ASCII Table
   ______________________________________________________________________
   .
   ch ctl   d  h  o     ch   d  h  o     ch   d  h   o     ch    d  h   o 
   ______________________________________________________________________
   .
   NUL ^@   0  0  0     sp  32 20 40      @  64 40 100      '   96 60 140 
   SOH ^A   1  1  1      !  33 21 41      A  65 41 101      a   97 61 141 
   STX ^B   2  2  2      "  34 22 42      B  66 42 102      b   98 62 142 
   ETX ^C   3  3  3      #  35 23 43      C  67 43 103      c   99 63 143 
   EOT ^D   4  4  4      $  36 24 44      D  68 44 104      d  100 64 144 
   ENQ ^E   5  5  5      %  37 25 45      E  69 45 105      e  101 65 145 
   ACK ^F   6  6  6      &  38 26 46      F  70 46 106      f  102 66 146 
   BEL ^G   7  7  7      `  39 27 47      G  71 47 107      g  103 67 147 
   .
   BS  ^H   8  8 10      (  40 28 50      H  72 48 110      h  104 68 150 
   HT  ^I   9  9 11      )  41 29 51      I  73 49 111      i  105 69 151 
   LF  ^J  10  a 12      *  42 2a 52      J  74 4a 112      j  106 6a 152 
   VT  ^K  11  b 13      _  43 2b 53      K  75 4b 113      k  107 6b 153 
   FF  ^L  12  c 14      ,  44 2c 54      L  76 4c 114      l  108 6c 154 
   CR  ^M  13  d 15      _  45 2d 55      M  77 4d 115      m  109 6d 155 
   SO  ^N  14  e 16      .  46 2e 56      N  78 4e 116      n  110 6e 156 
   SI  ^O  15  f 17      /  47 2f 57      O  79 4f 117      o  111 6f 157 
   .
   DLE ^P  16 10 20      0  48 30 60      P  80 50 120      p  112 70 160 
   DC1 ^Q  17 11 21      1  49 31 61      Q  81 51 121      q  113 71 161 
   DC2 ^R  18 12 22      2  50 32 62      R  82 52 122      r  114 72 162 
   DC3 ^S  19 13 23      3  51 33 63      S  83 53 123      s  115 73 163 
   DC4 ^T  20 14 24      4  52 34 64      T  84 54 124      t  116 74 164 
   NAK ^U  21 15 25      5  53 35 65      U  85 55 125      u  117 75 165 
   SYN ^V  22 16 26      6  54 36 66      V  86 56 126      v  118 76 166 
   ETB ^W  23 17 27      7  55 37 67      W  87 57 127      w  119 77 167 
   .
   CAN ^X  24 18 30      8  56 38 70      X  88 58 130      x  120 78 170 
   EM  ^Y  25 19 31      9  57 39 71      Y  89 59 131      y  121 79 171 
   SUB ^Z  26 1a 32      :  58 3a 72      Z  90 5a 132      z  122 7a 172 
   ESC ^[  27 1b 33      ;  59 3b 73      [  91 5b 133      {  123 7b 173 
   FS  ^\  28 1c 34      <  60 3c 74      \  92 5c 134      |  124 7c 174 
   GS  ^]  29 1d 35      =  61 3d 75      ]  93 5d 135      }  125 7d 175 
   RS  ^^  30 1e 36      >  62 3e 76      ^  94 5e 136      ~  126 7e 176 
   US  ^_  31 1f 37      ?  63 3f 77      _  95 5f 137     DEL 127 7f 177 
   ______________________________________________________________________


The strange characters listed in the leftmost column, such as "FF" and "BS", do not correspond to text characters. Instead, they correspond to "control" characters that, when sent to a printer or display device, execute various control functions. For example, "FF" is a "form feed" or printer page eject, "BS" is a backspace, , and "BEL" causes a beep ("bell"). In a text editor, they'll just be shown as a little white block or a blank space or (in some cases) little smiling faces, musical notes, and other bizarre items. To type them in, in many applications you can hold down the CTRL key and press an appropriate code. For example, pressing CTRL and entering "G" gives CTRL-G, or "^G" in the table above, the BEL character.

The ASCII table above only defines 128 characters, which implies that ASCII characters only need 7 bits. However, since most computers store information in terms of 8-bit bytes or octets, normally there will be one character stored to a byte. This extra bit allows a second set of 128 characters, an "extended" character set, to be defined beyond the 128 defined by ASCII.

In practice, there are a number of different extended character sets, providing such features as math symbols, cute little line-pattern building block characters for building forms, and extension characters for non-English languages. The extensions are not highly standardized and tend to lead to confusion.


Variants of ASCII

As computer technology spread throughout the world, many variations of ASCII, somewhat inappropriately referred to as ASCII extensions, were developed by corporations and standards bodies in order to facilitate the expression of non-English languages that still used Roman-based alphabets. ISO 646 (1972) was the first attempt to remedy the English bias, although it created compatibility problems, since it was still a seven-bit character set. No additional codes were available, so some were re-assigned in language-specific variants. It was thus impossible to know what character was represented by a code without knowing what variant was in use, and text processing systems were generally able to cope with only one variant, anyway.

Eventually, improved technology brought out-of-band means to represent the information formerly encoded in the eighth bit of each byte, freeing this bit to add another 128 additional character codes for new assignments. Eight-bit standards such as ISO/IEC 8859 were true extensions of ASCII, leaving the original character mapping intact and just adding additional values above the 7-bit range. This enabled a broader range of languages to be represented, but these standards were still plagued with incompatibilities and limitations. Still, ISO/IEC 8859-1 and original 7-bit ASCII are the most common character encodings in use today.

Unicode, being originally a 16-bit code and now effectively a 21-bit code, has a much wider array of characters, and its various encoding forms are rapidly supplanting ISO/IEC 8859 and ASCII in many environments. However, Unicode typically requires software and hardware to work 16 or 32 bits at a time, and has considerable potential to waste memory for applications that only need to work with a limited range of characters. Unicode is backward compatible: the first 128 code points map to the same characters as in ASCII, and the first 256 code points of Unicode map to the same characters as in ISO/IEC 8859-1. The UTF-8 encoding form of Unicode allows use of 8 bit character representations at the cost of longer (16, 24, or 32 bit) representations of less commonly used representations. It is widely used in the Western world since the Latin characters are often sufficient for those languages. Other languages, especially Chinese, Japanese, and Korean, may prefer UTF-16 since this encoding uses 16 bits for their characters where UTF-8 would require 24.

The portmanteau word ASCIIbetical has evolved to describe the collation of data in ASCII code order rather than "standard" alphabetical order (which requires some tricky computation, and varies with language).

ASCII contains many characters which were not commonly used, or at least spoken of, outside of the computing context; the "popularization" of these characters required that names be agreed upon for them. See the pronunciation guide in the external links, below.

ASCIIZ or ASCIZ is an adjective used to refer to a null-terminated ASCII string.

See also

External links


ASCII is also a name of one of the oldest and most prestigious computer magazines published in Japan. See ASCII (magazine)



Popular Topics

This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.  For the live article, click here.

Privacy