日期:2014-05-16  浏览次数:20714 次

关于一个UTF-8编码的简单问题,求助
见到一篇文章,关于UTF-8编码的,最后有疑问啊

具体来说,UTF-8编码有以下几种格式:

U-00000000 – U-0000007F: 0xxxxxxx
U-00000080 – U-000007FF: 110xxxxx 10xxxxxx
U-00000800 – U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
U-00010000 – U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00200000 – U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U-04000000 – U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

第 一个字节要么最高位是0(ASCII字节),要么最高两位都是1,最高位之后1的个数决定后面有多少个字节也属于当前字符编码,例如111110xx,最 高位之后还有四个1,表示后面有四个字节也属于当前字符的编码。后面每个字节的最高两位都是10,可以和第一个字节区分开。这样的设计有利于误码同步,例 如在网络传输过程中丢失了几个字节,很容易判断当前字符是不完整的,也很容易找到下一个字符从哪里开始,结果顶多丢掉一两个字符,而不会导致后面的编码解 释全部混乱了。上面的格式中标为x的位就是UCS编码,最后一种6字节的格式中x位有31个,可以表示31位的UCS编码,UTF-8就像一列火车,第一 个字节是车头,后面每个字节是车厢,其中承载的货物是UCS编码。UTF-8规定承载的UCS编码以大端表示,也就是说第一个字节中的x是UCS编码的高 位,后面字节中的x是UCS编码的低位。



例如U+00A9(©字符)的二进制是10101001,编码成UTF-8是11000010 10101001(0xC2 0xA9),但不能编码成11100000 10000010 10101001,UTF-8规定每个字符只能用尽可能少的字节来编码。

这个11000010 10101001是哪儿冒出来的啊。。。
实在看不懂。。哎,求各位大侠,元老帮助。

------解决方案--------------------
太长了,懒得看。

utf8,gbk都是8bits编码,兼容ASCII,为了区分ASCII和非ASCII,所以非ASCII的多字节字符单字节高位都是1,就这么简单的道理、
------解决方案--------------------
目前的编码还是个大难题,非英语还是比较悲剧
特别是爬虫分析每个国家的专题新闻的时候更是让人感觉悲剧
------解决方案--------------------
utf 8 就是一个字节不够编, 就用 2 个, 2个不够就用 3 个。