unicode和utf-8之间最大的区别就是在存储上。unicode是宽字符存储(字符都是2个字节或4个字节来存储),而utf-8是多字节存储, 字符的个数是不确定的(比如英文字符是1个字节表示,汉字可以是2个到6个来表示),其字符的首字节的前几位表明了它的字节个数。比如某个3字节汉字的 uft-8编码(二进制)如下:
1110xxxx 10xxxxxx 10xxxxxx
首字节中1的个数为3表明该汉字用3个字节来表示。
Unicode定义了两种编码格式:UTF-8和UTF-16。UTF-8编码与ASCII向后兼容。任何合法的ASCII编码都会自动成为合法的 UTF-8编码,使得将现有的ASCII数据库转换为Unicode数据库非常容易。UTF-8使用一个码点值来生成一个分布到一到四个字节上的位模式。
给定字符的UTF-8编码中的每个字节都被称为一个编码单元。标准ASCII字符集中字符的码点使用0x00到0x7F范围内的单一编码单元进行编码。大多数非亚洲文字用一个或两个编码单元(或字节)来表示每个字符。
在Unicode 3.1中,定义了大量新的增补字符,每个字符需要包含四个UTF-8编码单元。
第二种重要的编码格式是UTF-16,它使用了一个双字节的编码单元。最重要的是,UTF-16和ASCII一样简单,因为编码单元的值与0x0000到 0xFFFF范围内的任意码点的码点值相同。对于该范围内的字符,UTF-16是固定长度的双字节编码。再回过来看一下我们前面涉及ghe的例子,你可以 使用直接与该字符的码点对应的编码单元0x0490在UTF-16中表示它。
就是说,ascii字符在utf-8里面还是一样的,一个字节表示,超出ascii字符范围的,就用多字节表示,字节的数目由第一字节确定,最多6字节。如下:
utf-8:
1字节:0XXXXXXX(ascii)
2字节:110XXXXX 10XXXXXX
3字节:1110XXXX 10XXXXXX 10XXXXXX
4字节:11110XXX 10XXXXXX 10XXXXXX 10XXXXXX
5字节:。。。
utf-16:所有:XXXXXXXX XXXXXXXX
ascii:XXXXXXXX 00000000
1110xxxx 10xxxxxx 10xxxxxx
首字节中1的个数为3表明该汉字用3个字节来表示。
Unicode定义了两种编码格式:UTF-8和UTF-16。UTF-8编码与ASCII向后兼容。任何合法的ASCII编码都会自动成为合法的 UTF-8编码,使得将现有的ASCII数据库转换为Unicode数据库非常容易。UTF-8使用一个码点值来生成一个分布到一到四个字节上的位模式。
给定字符的UTF-8编码中的每个字节都被称为一个编码单元。标准ASCII字符集中字符的码点使用0x00到0x7F范围内的单一编码单元进行编码。大多数非亚洲文字用一个或两个编码单元(或字节)来表示每个字符。
在Unicode 3.1中,定义了大量新的增补字符,每个字符需要包含四个UTF-8编码单元。
第二种重要的编码格式是UTF-16,它使用了一个双字节的编码单元。最重要的是,UTF-16和ASCII一样简单,因为编码单元的值与0x0000到 0xFFFF范围内的任意码点的码点值相同。对于该范围内的字符,UTF-16是固定长度的双字节编码。再回过来看一下我们前面涉及ghe的例子,你可以 使用直接与该字符的码点对应的编码单元0x0490在UTF-16中表示它。
就是说,ascii字符在utf-8里面还是一样的,一个字节表示,超出ascii字符范围的,就用多字节表示,字节的数目由第一字节确定,最多6字节。如下:
utf-8:
1字节:0XXXXXXX(ascii)
2字节:110XXXXX 10XXXXXX
3字节:1110XXXX 10XXXXXX 10XXXXXX
4字节:11110XXX 10XXXXXX 10XXXXXX 10XXXXXX
5字节:。。。
utf-16:所有:XXXXXXXX XXXXXXXX
ascii:XXXXXXXX 00000000