字符编码区别

本文转自 
作者:sunxu_cocoa
链接:https://www.jianshu.com/p/c0eb837fa752
來源:简书
非商业用途,只做笔记

前言

开发的过程中经常要对文本进行编码之后再传给服务器,比如说上传表情到服务器,这个时候经常会用到什么UTF-8编码,有的人又说什么Unicode编码,这两者都是什么之前一直似懂非懂,自作主张的人为是两种不同的字符编码方式。经过一系列百度之后对这个问题有个更成熟的理解,在此做个笔记。

首先Unicode是一个字符集,很牛,它包含世界上所有的字符,每个字符对应一个二进制编码,用两个字节保存。这样的话所有国家的所有字符都可以在网络上自由的传输,但是这样做有个问题就是本来英文字母A,用ASCII编码是十进制的65,二进制的01000001,一个字节就可以保存,如果按照Unicode的标准需要两个字节保存,白白浪费了一个字节,这样肯定不好,如果我是美国人也不想要这样的结局,所以就通过人们的智慧就出现了UTF-8。

UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。那么通过UTF-8编码之后字母A只需要一个字节就可以了,这样美国人就比较开心了,但中国人又不太开心,因为汉字通过UTF-8编码之后通常需要三个字节,多花了一个字节,这个时候相比中国自己的GB2312编码方式显得不是很厚道,但为了世界统一,UTF-8的出现利大于弊,如果每个国家都按照自己的方式来,互联网就乱了。UTF-8编码有一个额外的好处,就是ASCII编码实际上可以被看成是UTF-8编码的一部分,所以,大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。

UTF-8编码规则

1. 单字节的字符,字节的第一位设为0,对于英语文本,UTF-8码只占用一个字节,和ASCII码完全相同;

2. n个字节的字符(n>1),第一个字节的前n位设为1,第n+1位设为0,后面字节的前两位都设为10,这n个字节的其余空位填充该字符unicode码,高位用0补足。

这样就形成了如下的UTF-8标记位:

0xxxxxxx

110xxxxx 10xxxxxx

1110xxxx 10xxxxxx 10xxxxxx

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

总结

在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。所以UTF-8的出现是为了更好的存储和网络传输,如果传输的内容多为字母,那么这种方式将会节约不少流量,就酱。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值