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. 配置 BizTalk Server

    使用“基本配置”或“自定义配置”配置 BizTalk Server. 基本配置与自定义配置       如果配置使用域组,则进行“自定义配置”. 如果配置使用自定义组名称而不是默认组名称,则进行“自定 ...

  2. U68464 滑稽树上滑稽果(guo)

    U68464 滑稽树上滑稽果(guo) 题目描述 小小迪有 n 个约会对象,每个对象有一个约会时长 p[i],小小迪 想尽可能多的去完成他的约会(假设小小迪可以瞬移),每个对象还有 一个忍耐时间 q[ ...

  3. Qt QLabel的使用

    QLabel类主要用来文本和图像的显示,没有提供用户交互功能.QLabel对象的视觉外观可以由用户自定义配置. 它还可以为另外一个可获得焦点的控件作为焦点助力器. QLabel可以显示下列的所有类型: ...

  4. .net core 2.0 配置Session

    本文章为原创文章,转载请注明出处 配置Session 在Startup.cs文件的ConfigureServices方法中添加session services.AddSession(); 在Start ...

  5. #194 sequence(搜索+动态规划+主席树)

    考虑按顺序暴搜子序列.如果序列中的数两两不同,显然每次给上一个找到的子序列添上后缀最小值,即为下一个要找的子序列.如果不能再加了就回溯继续考虑后缀次小.第三小……值,直到找到k个子序列. 有重复的数后 ...

  6. Codeforces980 D. Perfect Groups

    传送门:>Here< 题目大意:先抛出了一个问题——“已知一个序列,将此序列中的元素划分成几组(不需要连续)使得每一组中的任意两个数的乘积都是完全平方数.特殊的,一个数可以为一组.先要求最 ...

  7. 用二分法定义平方根函数(Bisection method Square Root Python)

    Python里面有内置(Built-in)的平方根函数:sqrt(),可以方便计算正数的平方根.那么,如果要自己定义一个sqrt函数,该怎么解决呢? 解决思路:  1. 大于等于1的正数n的方根,范围 ...

  8. 【XSY2707】snow 线段树 并查集

    题目描述 有\(n\)个人和一条长度为\(t\)的线段,每个人还有一个工作范围(是一个区间).最开始整条线段都是白的.定义每个人的工作长度是这个人的工作范围中白色部分的长度(会随着线段改变而改变).每 ...

  9. 【XSY1545】直径 虚树 DP

    题目大意 ​ 给你一棵\(n\)个点的树,另外还有\(m\)棵树,第\(i\)棵树与原树的以\(r_i\)为根的子树形态相同.这\(m\)棵树之间也有连边,组成一颗大树.求这棵大树的直径长度. \(n ...

  10. Hdoj 2050.折线分割平面 题解

    Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可以将平面 ...