计算机中字节,字符,Unicode,utf-32,utf-16,utf-8的概念很容易让人混淆,理解这里概念对于程序开发来说非常重要。
字节:字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位。一个字节用8位二进制表示,也就是说,一个字节的范围是0-255,用16进制表示就是0x00-0xFF
字符:表示一个符号,英文字母,汉字等等。一个字符没有特定等于多少字节。
Unicode:Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。在表示一个Unicode的字符时,通常会用“U+”然后紧接着一组十六进制的数字来表示这一个字符。在基本多文种平面(英文为 Basic Multilingual Plane,简写 BMP。它又简称为“零号平面”, plane 0)里的所有字符,要用四位十六进制数(例如U+4AE0,共支持六万多个字符,总共是256*256=65536个字符);在零号平面以外的字符则需要使用五位或六位十六进制数了。所以BMP的unicode编码字符用两个字节表示。
UTF-32:4个字节表格一个字符,完全对于unicode编码,在unicode编码前加上两个字节的0。比如:U+597D = 0x0000 597D。UTF-32的优点在于,转换规则简单直观,查找效率高。缺点在于浪费空间,同样内容的英语文本,它会比ASCII编码大四倍。这个缺点很致命,导致实际上没有人使用这种编码方法,HTML 5标准就明文规定,网页不得编码成UTF-32
UTF-8:UTF-8是一种变长的编码方法,字符长度从1个字节到4个字节不等。越是常用的字符,字节越短,最前面的128个字符,只使用1个字节表示,与ASCII码完全相同。
编号范围 | 字节 |
---|---|
0x0000 - 0x007F | 1 |
0x0080 - 0x07FF | 2 |
0x0800 - 0xFFFF | 3 |
0x010000 - 0x10FFFF | 4 |
UTF-16:UTF-16编码介于UTF-32与UTF-8之间,同时结合了定长和变长两种编码方法的特点。UTF-16的编码长度要么是2个字节(U+0000到U+FFFF),要么是4个字节(U+010000到U+10FFFF)
ASCII:一个字节代表一个字符,只包含英文字母,数字和一些基本符号。
参考资料:
http://www.ruanyifeng.com/blog/2014/12/unicode.html
http://www.cnblogs.com/yuguangchuan/p/4310952.html