以UTF-8编码方式讲数据存储的编码
2017-05-15 20:20
155 查看
UNICODE编码详解之UTF-8 , UTF-16,UTF-32
名词解释: Unicode只是一个简单的标准,用来把字符映射到数字上,Unicode并不告诉你字符是怎么编码成字节的。这是被编码方案决定的,通过UTF来指定。
文本数据在计算机底层的表示:
在计算机的硬盘,内存(等可以存储计算机数据的设备间)上数据都是以0和1表示的。比如这么一串在存储设备上的数据011010100010101010101010......如果它来自某个文本文件保存后的结果。
如何读懂它:
我们如何从这一串的0和1中从新解码得到一个个的字符呢?显然你需要把这一串的0和1分成一段一段的0和1。例如ASCII编码,他去翻译这些1和0的数据时它会把他们所有分成每组8位数据依次对照ASCII码表进行一一对应的译码,译码结束后请求计算机在屏幕上绘制出相应的字符,以便与使用者交流。
那么UTP-8这种编码表是怎么去翻译这些由0和1组成的数据的呢?
UTF-8编码规则:
1.可变长编码,由第一个字节决定该字符编码长度
2.大于127的码点都用多字节来编码,多字节包含开头字节和后续字节开头字节以若干个1开头(长度为几就有几个1,因此只要读完开头字节就可以知道本字符共有多少个字节),后接1个0.后续字节都以10开头。
3.从右到做,后续字节每个字节占用原码点6个位,剩余的放在开头字节。
4.开头字节和后续字节不共享任何数据,因此utf8是自同步的。举例来说我们看到一个字节以110…开头时,我们就知道这是一个2字节的字符的开头字节。
下面这张图片是来自javaSE1.8api java.io.Input 类中对Unicode字符编码的一个解释图
如此一来我们就来看看以下的例子:
0010 0010 1101 0101 1000 0101 (译码的时候看见了0说明接下的8 - 1位表示一个字符的真正编码,遇到了110表示接下来的16 - 1 - 2 = 13位表示一个字符的真正编码,遇到了1110则接下来的3*8 - 3 - 2*2 =24位表示一个字节的真正编码,)所以对上述的数据串分隔为 (0010 0010)(1101 0101 1000 0101)为什么减1和减2减3呢,因为开头的0 110 10 1110 都是此编码的标识位。
看看接下来更具体的 例子:
申明:内容有来自某博客:http://www.cnblogs.com/developerY/p/3575271.html 和 http://www.cnblogs.com/yelongsan/p/6236988.html
那么UTF-16和UTF-32又是什么呢?看了上述的讲解,你 大概已经知道UTF-8是以8个二进制位为一单位进行译码和编码的,而UTF-16就是以16位为一单位,UTF-32就是以32位二进制位为一单位来编码的。
<a href=
http://www.baidu.com>W3School</a>
名词解释: Unicode只是一个简单的标准,用来把字符映射到数字上,Unicode并不告诉你字符是怎么编码成字节的。这是被编码方案决定的,通过UTF来指定。
文本数据在计算机底层的表示:
在计算机的硬盘,内存(等可以存储计算机数据的设备间)上数据都是以0和1表示的。比如这么一串在存储设备上的数据011010100010101010101010......如果它来自某个文本文件保存后的结果。
如何读懂它:
我们如何从这一串的0和1中从新解码得到一个个的字符呢?显然你需要把这一串的0和1分成一段一段的0和1。例如ASCII编码,他去翻译这些1和0的数据时它会把他们所有分成每组8位数据依次对照ASCII码表进行一一对应的译码,译码结束后请求计算机在屏幕上绘制出相应的字符,以便与使用者交流。
那么UTP-8这种编码表是怎么去翻译这些由0和1组成的数据的呢?
UTF-8编码规则:
1.可变长编码,由第一个字节决定该字符编码长度
2.大于127的码点都用多字节来编码,多字节包含开头字节和后续字节开头字节以若干个1开头(长度为几就有几个1,因此只要读完开头字节就可以知道本字符共有多少个字节),后接1个0.后续字节都以10开头。
3.从右到做,后续字节每个字节占用原码点6个位,剩余的放在开头字节。
4.开头字节和后续字节不共享任何数据,因此utf8是自同步的。举例来说我们看到一个字节以110…开头时,我们就知道这是一个2字节的字符的开头字节。
下面这张图片是来自javaSE1.8api java.io.Input 类中对Unicode字符编码的一个解释图
如此一来我们就来看看以下的例子:
0010 0010 1101 0101 1000 0101 (译码的时候看见了0说明接下的8 - 1位表示一个字符的真正编码,遇到了110表示接下来的16 - 1 - 2 = 13位表示一个字符的真正编码,遇到了1110则接下来的3*8 - 3 - 2*2 =24位表示一个字节的真正编码,)所以对上述的数据串分隔为 (0010 0010)(1101 0101 1000 0101)为什么减1和减2减3呢,因为开头的0 110 10 1110 都是此编码的标识位。
这个表不小心弄错了~~ |
申明:内容有来自某博客:http://www.cnblogs.com/developerY/p/3575271.html 和 http://www.cnblogs.com/yelongsan/p/6236988.html
那么UTF-16和UTF-32又是什么呢?看了上述的讲解,你 大概已经知道UTF-8是以8个二进制位为一单位进行译码和编码的,而UTF-16就是以16位为一单位,UTF-32就是以32位二进制位为一单位来编码的。
<a href=
http://www.baidu.com>W3School</a>
相关文章推荐
- ASP.NET中将导出的数据以UTF-8编码方式进行存储
- QString内部仍采用UTF-16存储数据且不会改变(一共10种不同情况下的编码)
- JSP 表单输入,UTF编码,get方式提交数据出现中文乱码解决方法
- 使用jquery以jsonp方式在gbk页面请求utf-8编码的数据
- asp中接收到querystring是utf-8编码的处理方式
- 地磅称量系统之(37~39) 直接向数据库的数据表WtBill添加测试数据以及绑定用户控件和使用编码的方式控制dataGridView控件的每列属性和添加数据数据库的表中不存在的字段(非绑定列)
- Eclipse编写代码可以设置源文件的编码方式UTF-8 [转]
- Python MySQLdb 使用utf-8 编码插入中文数据
- xmlHttpRequest 以Post方式发数据到Asp.net页,在gb2312编码下的解决办法
- XML 数据的编码方式
- flex中接收非utf-8编码的后台数据
- XML 数据的编码方式
- XML数据的编码方式
- SharePoint 2007 ContentType 数据存储方式分析
- LDAP - 数据存储的一种思考方式
- XML 数据的编码方式
- UTF-8的编码方式
- 设置VS团队开发 统一的编码方式为:签名的UTF-8
- Oracle10g中的4种数据存储方式
- UTF-16, 一种ISO 10646的编码方式