ascii和unicode是字符集,utf-8是编码集

  • 字符集:为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point)
  • 编码规则:将「码位」转换为字节序列的规则(编码/解码 可以理解为 加密/解密 的过程)

ascii每个字符占用一个字节(8位),其中第一位恒为0,因此ascii一共可以表示128个字符

unicode每个字符占用两个字节(16位),可以用来表示汉字

链接:https://www.zhihu.com/question/23374078/answer/24385963
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

关于UTF-8

UTF-8 顾名思义,是一套以 8 位为一个编码单位的可变长编码。会将一个码位编码为 1 到 4 个字节:

unicode和ascii都是一种对字符的编码方式,规定了字符的二进制表示,却没规定这个二进制代码如何存储。

所以在一个系统中,如何正确的区分unicode和ascii编码呢?于是就有了utf-8,utf-8主要就是对【字符的二进制代码】进行编码

utf-8如何编码

对于单字节,utf-8就使用一个字节编码,第一位为0,剩下七位为【字符的二进制代码】,这和ascii是一样的。

对于多字节来说,假设是N字节,那么对于第一个字节来说前N位都是1,第N+1位是0,第二个字节前两位是10,第三个及后面的字节前两位也都是10,余下的位就用【字符的二进制代码】补充。

这就是对utf-8对unicode即【字符的二进制代码】的一种编码方式。

utf-8如何解码

如何第一位是0,表示是这个字节就是一个字符,如果第一位是1,统计一下一共多少个1,1的个数就表示字符的字节数

 
在UTF-8中字母占一个字节,汉字占三个字节

python中的字符编码问题

在python中默认的字符编码方式是ansii,所以当输入中文时会报错,这是需要在第一行加上#encoding=utf-8,就可以将中文用utf-8来进行编码了,对于英文来说它的编码方式还是ansii,

对于unicode来说,他就直接采用unicode编码方式

#encoding=utf-
import chardet //查看字符串编码方式
a = '哈哈'
b = 'abc'
c = u'你好' print len(a) //utf-8,一个字符三位
print len(b)
print len(c) //unicode为什么是两位
print chardet.detect(a)
print chardet.detect(b)
print type(a)
print type(b)
print type(c) ------output--------- {'confidence': 0.7525, 'language': '', 'encoding': 'utf-8'}
{'confidence': 1.0, 'language': '', 'encoding': 'ascii'}
<type 'str'>
<type 'str'>
<type 'unicode'>

str和unicode转化

str是对【字符二进制代码】编码后的内容,它可以采用ansii,utf-8进行编码

unicode -> str 通过 encode('')方法,默认是ansii

str -> unicode 通过decode('')

d = a.decode('utf-8') //a为上文
print type(d) ------output-------
<type 'unicode'>

参考博客:

http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

http://blog.51cto.com/9478652/2057896

python中字符编码及unicode和utf-8区别的更多相关文章

  1. Python中字符编码及转码

    python 字符编码及转码 python 默认编码 python 2.X 默认的字符编码是ASCII, 默认的文件编码也是ASCII python 3.X 默认的字符编码是unicode,默认的文件 ...

  2. python的str,unicode对象的encode和decode方法, Python中字符编码的总结和对比bytes和str

    python_2.x_unicode_to_str.py a = u"中文字符"; a.encode("GBK"); #打印: '\xd6\xd0\xce\xc ...

  3. python中的编码问题:以ascii和unicode为主线

      1.unicode.gbk.gb2312.utf-8的关系 http://www.pythonclub.org/python-basic/encode-detail 这篇文章写的比较好,utf-8 ...

  4. Python的字符编码

    Python的字符编码 1. Python字符编码简介 1. 1  ASCII Python解释器在加载.py文件的代码时,会对内容进行编码,一般默认为ASCII码.ASCII(American St ...

  5. Python常见字符编码间的转换

    主要内容:     1.Unicode 和 UTF-8的爱恨纠葛     2.字符在硬盘上的存储     3.编码的转换     4.验证编码是否转换正确     5.Python bytes类型 前 ...

  6. 彻底搞懂Python的字符编码

    前言:中文编码问题一直是程序员头疼的问题,而Python2中的字符编码足矣令新手抓狂.本文将尽量用通俗的语言带大家彻底的了解字符编码以及Python2和3中的各种编码问题. 一.什么是字符编码. 要彻 ...

  7. 转:Python常见字符编码及其之间的转换

    参考:Python常见字符编码 + Python常见字符编码间的转换 一.Python常见字符编码 字符编码的常用种类介绍 第一种:ASCII码 ASCII(American Standard Cod ...

  8. Python基础-字符编码与转码

    ***了解计算机的底层原理*** Python全栈开发之Python基础-字符编码与转码 需知: 1.在python2默认编码是ASCII, python3里默认是utf-8 2.unicode 分为 ...

  9. 小话python 中的编码转换

    1.前言: 一直认为自己会了,也明白了其中的知识,但是过几天不用就马上忘记了,总不能天天复习吧!还是来个好记性不如烂笔头吧! 2.编码: python解释器在加载 .py 文件中的代码时,会对内容进行 ...

随机推荐

  1. 工厂类,配置文件,静态方法,反射构成编译器解耦;ioc的一个概念 ;通过xml创建容器里面存储对象

    工厂类,配置文件,静态,反射方法构成编译器解耦;ioc的一个概念

  2. iOS WKWebView全屏浏览网页返回 状态栏问题

    问题: 用这个方法隐藏显示状态栏,总是带有残余 过一会才能消失掉 [[UIApplication sharedApplication]setStatusBarHidden:YES]; 可以切换状态栏的 ...

  3. 11/1/2018模拟 Max

    题面 也就是说, 随机序列RMQ.(\(n \le 8388608\), \(m \le 8*10^6\)) 解法 我写了笛卡尔树+tarjan 然而听神仙说, 因为数据随机, 建完树暴力找lca就行 ...

  4. ubuntu终端快捷键

    ctrl+alt+t 新终端 ctrl+shift+t打开新的标签页 ctrl+d关闭终端 ctrl+s 暂停屏幕输出 ctrl+q 继续屏幕输出 ctrl+l 清屏 ctrl+alt+f1 切换到第 ...

  5. Spring Boot2.0自定义配置文件使用

    声明: spring boot 1.5 以后,ConfigurationProperties取消locations属性,因此采用PropertySource注解配合使用 根据Spring Boot2. ...

  6. [Codeforces235D]Graph Game——概率与期望+基环树+容斥

    题目链接: Codeforces235D 题目大意:给出一棵基环树,并给出如下点分治过程,求点数总遍历次数的期望. 点分治过程: 1.遍历当前联通块内所有点 2.随机选择联通块内一个点删除掉 3.对新 ...

  7. 洛谷P4513 小白逛公园

    区间最大子段和模板题.. 维护四个数组:prefix, suffix, sum, tree 假设当前访问节点为cur prefix[cur]=max(prefix[lson],sum[lson]+pr ...

  8. Paint the Wall ZOJ - 2747

    点数很多,坐标值很大,然后离散化一下用一个点表示一小块的面积对应的颜色,然后更新的时候一块一块更新,查询的时候一块一块查询 #include<map> #include<set> ...

  9. 利用ansible批量部署zabbix-agent

    应用环境:Linux运维工作少不了一个好的监控,zabbix就是目前比较好的一款开源监控软件. 监控类型多种多样,如果不介意或者系统支持安装,那么agent方式是首选. 当主机数量较多时,可以利用相关 ...

  10. Centos 6.x/7.x yum安装php5.6.X

    鉴于Centos 默认yum源的php版本太低了,手动编译安装又有点一些麻烦,那么如何采用Yum安装的方案安装最新版呢.那么,今天我们就来学习下如何用yum安装php最新版. 1.检查当前安装的PHP ...