理清字符集和字符编码关系
?
什么是字符集? ? 字符(Character)是文字与符号的总称,包括文字、图形符号、数学符号等。一组抽象字符的集合就是字符 ? ? ? ? 集(Charset)。
? ? 字符集常常和一种具体的语言文字对应起来,该文字中的所有字符或者大部分常用字符就构成了该文字的字符集,比如英文字符集。
? ? 常见的字符集包括ASCII字符集(由控制字符和图形字符组成)、GB2312字集(简体字集),GBK字集(简繁字集),通用字符集(Universal Character Set,UCS),Unicode字集(同UCS)。
?
什么是字符编码? ? 字符编码(Character Encoding):是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),与其他东西的一个集合(如号码或电脉冲)进行配对。即在符号集合与数字系统之间建立对应关系,它是信息处理的 一项基本技术。通常人们用符号集合(一般情况下就是文字)来表达信息。而以计算机为基础的信息处理系统则是利用元件(硬件)不同状态的组合来存储和处理信息的。元件不同状态的组合能代表数字系统的数字,因此字符编码就是将符号转换为计算机可以接受的数字系统的数,称为数字代码。
?
?
字符集和字符编码直接的关系? ? 以ascii字符集和ascii编码为例
? ? Ascii字符集包含A,B,C….等字符
? ? Ascii编码是一种将ascii字符集中的字符映射到计算机的映射关系,即表示字符与存储形式的对应关系。
? ? A--------------------------->65
? ? B--------------------------->66
? ? C--------------------------->67
?
?
针对Unicode的编码UTF-32,UTF-16,UTF-8? ? ? UTF-32,对每个字符都使用4字节,就空间而言,是非常没有效率的。特别地,非基本多文种平面的字符在大部分文件中通常很罕见,以致于它们通常被认为不存在占用空间大小的讨论,使得UTF-32通常会是其它编码的二到四倍。
? ? ? UTF-16,Unicode的码空间从U+0000到U+10FFFF,对每个字符使用2字节或者4字节进行存储。java中的string就是使用UTF-16编码存储的,当一个字符的编码在16bit范围内,就用一个char存储,当字符编码范围超过16bit时,用两个char来保存这个字符。
? ? ? UTF-8使用一至四个字节为每个字符编码。
? ? ? 可以参考下面链接,去了解unicode编码的一些详细信息。
? ? http://zh.wikipedia.org/wiki/UTF-32
? ? http://zh.wikipedia.org/wiki/UTF-16
? ? http://zh.wikipedia.org/wiki/UTF-8