字符集与编码简介

    今天无意中看到字符集与编码的文章,仔细研读了下,对这些字符编码方案了解了不少,一些概念也清晰很多了,特记下以备查用,也以此为我的JE博客中开篇文章。

   下面罗列下我对这些字符编码的理解:

    ASCII: 单字节定长编码方案。主要针对英文字符。只用到了低7位,高位为0。以前学C的时候老师常提。

    ISO8859-1:单字节定长编码方案。西欧语系国家通用的字符集编码。ASCII编码在西欧国家并不通用。针对这个问题ISO在ASCII编码的基础上进行了扩充,制定了ISO8859-1编码,ISO8859-1编码使用了一个字节的全部8位,编码范围是0-255,能包含西欧语系的所有字母和符号。

    GB2312:双字节。简体汉字编码。GB2312将代码表分区94个区(0xA1-0xFE),对应第一个字节,每个区94个位(0xA1-0xFE),对应了第二字节,两个字节的值分别为区号的值和位号的值加32(0x20),因此也被称为区位码。GB2312的编码范7围是0x2121-0x777E,与ASCII有重叠,通常方法是将GB码的两个字节的最高位置1区别。

    GBK、GBK2K:GBK是GB2312的扩展,包括繁体字。GB18030-2000(GBK2K)在GBK的基础上增加了藏、蒙等少数民族的字符,GBK2K从根本上解决了字位不够、字形不足的问题。GBK2K首先要求实现能够完全映射到Unicode3.0标准的所有字形,现在还没有任何一个操作系统支持GBK2K。

    Unicode:双字节定长编码方案。ISO(国际化标准组织)将全世界所有的符号进行统一编码,称为Unicode编码。

    UTF-8:1-3字节变长编码方案。仍属于Unicode编码,不过进行了转换与扩展。UTF-8编码是将Unicode编码中不同范围的字符采用不同的字节进行编码,对于ASCII编码的字符仍使用一个字节进行编码,UTF-8编码完全兼容ASCII编码。与Unicode想比较,UTF-8编码使得英文文档的占用空间减小了一半,因此UTF-8颇受英语系国家的青睐。
    
    UTF-16:UTF-16编码在Unicode基础上进行了一些细节上的扩充,增加了对Unicode编码没有包括的字符的表示方式。UTF-16对Unicode的扩充并没有影响Unicode编码中的原有字符,容易看出Unicode是UTF-16的子集。UTF-16足够用来编码全球的所有字符,微软从Windows2000开始支持UTF-16编码。

    最后记录点关于大端与小端的知识。
    关于Little-Endian和Big-Endian
    在不同体系的计算机系统中,编码的Unicode字符在内存中存储的顺序是不同的。使用Inter生产的CPU的计算机,内存中数据存储通常是低字节在前,高字节在后,这种存储方式被称为Little-Endian。在对于一些计算机,内存中数据存储通常是高字节在前,低字节在后,这种存储方式被称为Big-Endian。
    UTF-16编码的文件通常在文件开头用字符标志出使用的存储方式:
    若文件开头是“0xFF 0xFF”,表示文件其余部分是Little-Endian的 UTF-16编码;
    若文件开头是“0xFE 0xFF”,表示文件其余部分是Big-Endian的 UTF-16编码。


参考:
    1. http://ethen.iteye.com/blog/797696
    2. http://www.iteye.com/topic/398782
   

你可能感兴趣的:(Blog)