UTF-8(Unicode Transformation Format-8 bits)是一种可变长度的Unicode编码方式,它可以用1到4个字节表示一个字符,根据字符的不同而变化长度。
- 单字节, 8位可全部用于编码,可表示 256个字符。
- 两字节。
第一个字节以110开头,后面跟着5位Unicode编码。
第二个字节以10开头,后面跟着6位Unicode编码。
11位可用用于编码,可表示 2,048 个字符。 - 三字节。
第一个字节以1110开头,后面跟着4位Unicode编码。
接下来的两个字节都以10开头,每个后面跟着6位Unicode编码。
16位可用于编码,可表示 65,536 个字符。 - 四字节。
第一个字节以11110开头,后面跟着3位Unicode编码。
接下来的三个字节都以10开头,每个后面跟着6位Unicode编码。
21位可用于编码,可表示 2,097,152 个字符。|
这里记录两个问题.
1) 为什么我们用字节流读取中文文字时出现的乱码都哪些不常见的字符,而没有像A,B,C这样的字符呢?
如
按字节读出来的乱码如下
这就是如上的编码规则决定了的。
2)如果两个asci码字符连在一起如 11001011(Ë 203) 10110110 (¶ 182), 显然这两个字符组在一起也是符合两字节表达一个字符的。那么这两个字节组装在一起是表示一个字符还是两个字符呢?
我们将这两个字符输入在文本文件中再用流读取看看
可以看到它输出的并不是2个字节,而是4个,也就是11000011这个开头的字节不再能表示2个字节组成一个字符的开头字节。