Asc转UTF8及Unicode

GBK为EDIT控件能够显示的代码,其它代码要经过转换后才能显示。
中英文的区别:从ASCII、GB2312、GBK到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为:非中文<0x80;中文>0x80,英文为单字节,中文为双字节。按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集 (DBCS)。GB2312的原文还是区位码,从区位码到内码,需要在高字节和低字节上分别加上A0。在DBCS中,GB内码的存储格式始终是big endian,即高位在前。从ASCII、GB2312、GBK到GB18030的编码方法是向下兼容的。而Unicode只与ASCII兼容(更准确地说,是与ISO-8859-1兼容),与GB码不兼容。例如“汉”字的Unicode编码是6C49,而GB码是BABA。
GB2312:(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE.
GBK:2000年的GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字,该编码与UCS兼容。现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。GBK的编码区间为0X8140到0XFEFE。整个码表分为5个区间,称为GBK1(A1A1-A9FE)、GBK2(B0A1-F7EE)、GBK3(8140-A0FE)、GBK4(AA40-FEA0)、GBK5(A840-A9A0).其中GBK1包括符号717个,GBK2包括GB2312汉字6763个,GBK3包括GB13000.1中的汉字6080个,GBK4包括增补的汉字8160个,GBK5包括扩充汉字符号166个。

Unicode(UCS2):文件头十六进制代码为FF、FE。为中、日、朝三国文字编码,把单个汉字的十六进制码反位存贮。Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCS。UCS可以看作是"Unicode Character Set"的缩写。从Unicode2.0开始,Unicode项目采用了与ISO 10646-1相同的字库和字码。Unicode协会现在的最新版本是2005年的Unicode 4.1.0。ISO的最新标准是10646-3:2003。怎样传输这些编码,是由UTF(UCS Transformation Format)规范规定的,常见的UTF规范包括UTF-8、UTF-7、UTF-16。IETF的RFC2781和RFC3629以RFC的一贯风格,清晰、明快又不失严谨地描述了UTF-16和UTF-8的编码方法。我总是记不得IETF是Internet Engineering Task Force的缩写。但IETF负责维护的RFC是Internet上一切规范的基础。
Unicode big endian:文件头十六进制代码为FE、FF。把单个汉字的十六进制码反位存贮。
UTF-8:文件头十六进制代码为EF、BB、BF。UTF-8就是以8位为单元对UCS进行编码。为不定长度的编码, 对英文,仍然和ASCII一样用1个字节表示,这个字节的值小于128(/x80); 对其他语言的用一个值位于128-256之间的字节开始,再加后面紧跟的2个字节表示,一个字符一共是3个字节;。从UCS-2到UTF-8的编码方式如下:

UCS-2编码(16进制)        UTF-8 字节流(二进制)
0000 - 007F        0xxxxxxx
0080 - 07FF        110xxxxx 10xxxxxx
0800 - FFFF        1110xxxx 10xxxxxx 10xxxxxx
例如“汉”字的Unicode编码是6C49。6C49在0800-FFFF之间,所以肯定要用3字节模板了:1110xxxx 10xxxxxx 10xxxxxx。将6C49写成二进制是:0110 110001 001001, 用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。
UTF-16:UTF-16以16位为单元对UCS进行编码。UTF-16以16位为单元对UCS进行编码。对于小于0x10000的UCS码,UTF-16编码就等于UCS码对应的16位无符号整数。对于不小于0x10000的UCS码,定义了一个算法。不过由于实际使用的UCS2,或者UCS4的BMP必然小于0x10000,所以就目前而言,可以认为UTF-16和UCS-2基本相同。但UCS-2只是一个编码方案,UTF-16却要用于实际的传输,所以就不得不考虑字节序的问题。
UTF-32:Utf-32 是输入Unicode 字符方法, 使用一个固定值32 位为各个字符。Utf-32 最初是Ucs 4 标准的一个子集, 但JTC1/SC2/WG2 的原则和规程文件阐明, 字符的所有未来任务将被强迫对BMP 或第一14 架补充飞机并且取消了前供应为民办利用代码主张在小组60 对7F 和在飞机E0 里对FF 。

你可能感兴趣的:(Algorithm,Relation)