二、代码页(Code Page)
1.
代码页也称为“内码表”,是与特定语言的字符集相对应的一张表。操作系统中不同的语言和区域设置可能使用不同的代码页。
例如,微软所用的ANSI代码页1252(CP1252)对应于ISO 8859-1字符集(即Latin-1字符集,但CP1252对Latin-1有扩展,其中编码128~159也被定义了字符,这是与Latin-1字符集不同之处),用于英语和大多数欧洲语言(西班牙语和各种日耳曼/斯堪的纳维亚语),而IBM所用的OEM代码页932(CP932)对应于Shift JIS字符集(但CP932对Shift JIS有扩展;另外,对应的微软ANSI代码页为CP943,也对Shift JIS有扩展),用于日本字符。
代码页一般与其所直接对应的字符集之间并非完全等同,往往因为种种原因(比如标准跟不上现实实践的需要)而会对字符集有所扩展。
2.
早期,代码页是IBM称呼计算机的BIOS所支持的字符集编码。当时通用的操作系统都是命令行界面的,这些操作系统直接使用BIOS提供的字符绘制功能来显示字符(或者是一组嵌入在显卡字符生成器中的字形)。这些BIOS代码页也被称为OEM代码页。
随着图形用户界面操作系统的广泛使用(最初被广为接受的图形用户界面操作系统是Windows3.1),操作系统本身具有了字符绘制的功能。微软于是在Windows操作系统没有转向UTF-16(UTF-16的推出要早于现在被广为认可的UTF-8)作为编码实现之前(即Windows2000发布之前),定义了一系列支持不同国家和地区所制定的字符集的代码页,被称作“Windows代码页”或“ANSI代码页”。代表性的是实现了ISO-8859-1(即Latin-1)的代码页1252(即CP1252),以及实现了GBK的代码页936(即CP936)。
3.
代码页可以在从字符映射到单字节值或多字节值的表格中表现。注意,这里的单字节值与多字节值指的是特定于系统平台的物理意义上的字节序列,不是指与系统平台无关的逻辑意义上的码元序列。正因为这样,代码页也被称之内码表。
也就是说,代码页是字符集的具体实现,可以将其理解为一张“字符-字节”映射表,通过查表实现“字符-字节”的翻译。
代码页主要用于字符在计算机中的存储和显示,比如,计算机读取了一个二进制字节,那这个字节到底代表哪个字符,就需要到指定的代码页中查找,这个查找的过程就被称为查表。
4.
代码页的指定在Windows中是系统默认设置的(即默认系统区域设置),也可在(Windows7的)“控制面板-区域和语言-管理-非Unicode程序的语言-更改系统区域设置”中选择列表中的语言进行更改。
注意:系统区域设置System Locale可用于确定在不使用Unicode编码的程序中输入和显示信息的默认字符集和字体,这样就可以让非Unicode程序在计算机上使用指定的语言得以正常运行。因此,在计算机上安装某些非Unicode程序时,可能需要更改默认的系统区域设置。为系统区域设置选择不同的语言并不会影响Windows系统本身或其他使用Unicode编码的程序的菜单和对话框中的语言显示。
来源: http://www.cnblogs.com/benbenalin/p/6911781.html