Code Page,是字符编码的另一种说法。
Code Page包含了一个表,表中的值,用于表示针对某种语言所用的字符集。
更简单点说,就是Code Page中,用一个数字编号,表示了所要采用何种字符编码,去编解码相应的值,用于正确显示出相应的字符。
Code Page这一概念,源于IBM,后被其他常见广泛采用,包括Microsoft,SAP,Oracle等。
这些常见,各自定义了一套自己的Code Page,给每一个code page号,指定一个字符编码。
比如,对于众所周知的UTF-8编码,在IBM的Code Page中编号是1208,在微软中是65001,在SAP中是4110。
接下来,主要介绍大家最常见的Windows的Code Page
如前所述,Windows中也有自己的一套Code Page的定义。
用对应的某个数字,Code Page Number,即Code Page中的标识符(Identifier),表示相应的字符编码。
而一般Code Page也常缩写为CP
比如,CP936表示GBK中文编码,CP65001表示UTF-8编码,CP54936表示GB18030编码,CP950表示BIG5繁体中文等等。
C#中使用当前系统默认编码处理字符 | |
---|---|
对于C#来说,处理字符时涉及可能在不同环境中使用的话,那么最好用系统默认编码: StreamReader reader = new StreamReader(path, System.Text.Encoding.Default); |
Windows中的Code Page,按照引用领域来划分,可以分为两类:ANSI Code Page和 OEM Code Page
ANSI Code Page的官网正式叫法其实是Windows Code Page。但是由于ANSI Code Page被误用的太广泛了,索性微软也就接受了此叫法,然后就叫做ANSI Code Page了。
类似地,ANSI Code Page=ANSI Windows Code Page
ANSI Code Page主要是用于Windows系统中,本地编码是非Unicode的,图形用户界面(GUI)程序。
ANSI的Code Page相关的表格,参见第 A.3.1.1 节 “ANSI Code Page表”
OEM Code Page主要是用于Windows系统中的命令行界面(console)程序,虚拟DOS。
OEM Code Page可以视为是DOS和IBM PC时代的(过渡)剩余产品。
除了ANSI Code Page之外,之所以又设计出一个OEM Code Page,是因为:
因为作为新的图形用户界面系统的Windows,也要兼容旧的命令行程序,即向后兼容性。
字体和旧的VGA硬件建议,文字图形界面所用的编码,最好和Code Page 437兼容。
多数的OEM的Code Page,和(非ASCII的)后半部分的CP437,都是公用同一套代码点(code point)的。
一般的OEM Code Page的后半段编码,和ANSI Code Page,完全不同。不过,对于部分双字节编码的,定长的Code Page(如泰语的847,越南语的1258)和多字节CJK编码的Code Page(如932,936,949,950)来说,ANSI和OEM的Code Page,都用的同一套编码。
和OEM Code Page相关的表格,参见第 A.3.1.2 节 “OEM Code Page表”
其中,ANSI和OEM共有的一些Code Page,可参见第 A.3.1.3 节 “ANSI和OEM共有的Code Page表”
而其他一些常见的Code Page,可参见第 A.3.1.4 节 “其他一些常见的Code Page表”
除了ANSI和OEM,以及ANSI,OEM共有的Code Page之外,其他还有很多Code Page定义。
关于所有的Windows中的Code Page的定义,可在微软官网[21]中找到。
此处已收录至第 A.3.2 节 “所有的Code Page相关的表格”,以方便查阅。