扩展ASCII
在小型电脑开发的初期,就已经严格地建立了8位元位元组。因此,如果使用一个位元组来保存字元,则需要128个附加的字元来补充ASCII。1981年,当最初的IBM PC推出时,视讯卡的ROM中烧有一个提供256个字元的字元集,这也成为IBM标准的一个重要组成部分。
最初的IBM扩展字元集包括某些带重音的字元和一个小写希腊字母表(在数学符号中非常有用),还包括一些块型和线状图形字元。附加的字元也被添加到ASCII控制字元的编码位置,这是因为大多数控制字元都不是拿来显示用的。
该IBM扩展字元集被烧进无数显示卡和印表机的ROM中,并被许多应用程式用于修饰其文字模式的显示方式。不过,该字元集并没有为所有使用拉丁字母表的西欧语言提供足够多的带重音字元,而且也不适用于Windows。Windows不需要图形字元,因为它有一个完全图形化的系统。
在Windows 1.0(1985年11月发行)中,Microsoft没有完全放弃IBM扩展字元集,但它已退居第二重要位置。因为遵循了ANSI草案和ISO标准,纯Windows字元集被称作「ANSI字元集」。 ANSI草案和ISO标准最终成为ANSI/ISO 8859-1-1987,即「American National Standard for Information Processing-8-Bit Single-Byte Coded Graphic Character Sets-Part 1: Latin Alphabet No 1」,通常也简写为「Latin 1」。
在Windows 1.0的《Programmer's Reference》中印出了ANSI字元集的最初版本。
0- 1- 2- 3- 4- 5- 6- 7- 8- 9- A- B- C- D- E- F-
-0 * * 0 @ P ` p * * ° À Ð à ð
-1 * * ! 1 A Q a q * * ¡ ± Á Ñ á ñ
-2 * * " 2 B R b r * * ¢ ² Â ò â ò
-3 * * # 3 C S c s * * £ ³ Ã ó ã ó
-4 * * $ 4 D T d t * * ¤ ´ Ä ô ä ô
-5 * * % 5 E U e u * * ¥ µ Å õ å õ
-6 * * & 6 F V f v * * ¦ ¶ Æ ö æ ö
-7 * * ' 7 G W g w * * § · Ç * ç *
-8 * * ( 8 H * h * * * ¨ ¸ È ø è ø
-9 * * ) 9 I Y I y * * © ¹ É Ù é ù
-A * * * : J Z j z * * ª º Ê Ú ê ú
-B * * + ; K [ k { * * « » Ë Û ë û
-C * * , < L l | * * ¬ ¼ Ì Ü ì ü
-D * * - = M ] m } * * ­ ½ Í Ý í ý
-E * * . > N ^ n ~ * * ® ¾ Î Þ î þ
-F * * / ? * _ o DEL * * ¯ ¿ Ï ß ï ÿ
* - not applicable
空方框表示该位置未定义字元。这与ANSI/ISO 8859-1的最终定义一致。ANSI/ISO 8859-1仅显示了图形字元,而没有控制字元,因此没有定义DEL。此外,代码0xA0定义为一个非断开的空格(这意味著在编排格式时,该字元不用于断开一行),代码0xAD是一个软连字元(表示除非在行尾断开单词时使用,否则不显示)。此外,ANSI/ISO 8859-1将代码0xD7定义为乘号(*),0xF7为除号(/)。Windows中的某些字体也定义了从0x80到0x9F的某些字元,但这些不是ANSI/ISO 8859-1标准的一部分。
MS-DOS 3.3(1987年4月发行)向IBM PC用户引进了内码表(code page)的概念,Windows也使用此概念。内码表定义了字元的映射代码。最初的IBM字元集被称作内码表437,或者「MS-DOS Latin US)。内码表850就是「MS-DOS Latin 1」,它用附加的带重音字母代替了一些线形字元。其他内码表被其他语言定义。最低的128个代码总是相同的;较高的128个代码取决於定义内码表的语言。
在MS-DOS中,如果用户为PC的键盘、显示卡和印表机指定了一个内码表,然後在PC上创建、编辑和列印文件,一切都很正常,每件事都会保持一致。然而,如果用户试图与使用不同内码表的用户交换档案,或者在机器上改变内码表,就会产生问题。字元码与错误的字元相关联。应用程式能够将内码表资讯与文件一起保存来试图减少问题的产生,但该策略包括了某些在内码表间转换的工作。
虽然内码表最初仅提供了不包括带重音符号字母的附加拉丁字元集,但最终内码表的较高的128个字元还是包括了完整的非拉丁字母,例如希伯来语、希腊语和斯拉夫语。自然,如此多样会导致内码表变得混乱;如果少数带重音的字母未正确显示,那么整个文字便会混乱不堪而不可阅读。
内码表的扩展正是基於所有这些原因,但是还不够。斯拉夫语的MS-DOS内码表855与斯拉夫语的Windows内码表1251以及斯拉夫语的Macintosh内码表10007不同。每个环境下的内码表都是对该环境所作的标准字元集修正。IBM OS/2也支援多种EBCDIC内码表。