mrfangzheng

Hope and fear are useless. Be confident, and always be prepared for the worst.
  首页  :: 新随笔  :: 联系 :: 管理

字符集GBK, Unicode, 编码GBK, Unicode, UTF8, UTF16

Posted on 2008-09-11 20:55  mrfangzheng  阅读(666)  评论(0编辑  收藏  举报

字符集charset : 定义一个集合中包含多少字符, 即哪些字符属于该字符集哪些不属于, 比如: ASCII, GBK, Unicode, 几乎所有其他字符集都包含ASCII字符集

编码encoding : 定义字符如何用字节存储, 比如: ASCII(也表示编码),GBK(也表示编码), Unicode(也表示编码), UTF8, UTF16

一个字符集有一种或者n种编码, 1:n

有时一个名字既代表一个字符集又代表一种编码, 比如: GBK, ASCII, Unicode

Unicode字符集常用2种编码方式: Unicode编码, UTF8编码. 其中Unicode编码定义每个字符占2个字节, 很多系统内存中都使用Unicode编码, 比如: C#, Java, 比如: 在C#中, new char[10]分配10x2=20个字节的空间用于存储10个Unicode编码的字符.

而UTF8定义英文字符1个字节, 中文等字符则占3个字节, 这样在存储和网络传输上英文字符串时占用的空间和带宽就较小.

字符串"a中"(2个字符)保存成文件时如下:

编码 字节 说明
GBK 61 D6 D0 61是GBK编码的''a', D6 D0是GBK编码的'中'
Unicode FF FE 61 00 2D 4E FF FE是Unicode编码的文件首标识, 61 00是Unicode编码的'a', 2D 4E是Unicode编码的'中'
UTF8 EF BB BF 61 E4 B8 AD EF BB BF是UTF8的文件首标识, 61是UTF8编码的'a', E4 B8 AD是UTF8编码的'中'