python中字符编码及unicode和utf-8区别
ascii和unicode是字符集,utf-8是编码集
- 字符集:为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point)
- 编码规则:将「码位」转换为字节序列的规则(编码/解码 可以理解为 加密/解密 的过程)
ascii每个字符占用一个字节(8位),其中第一位恒为0,因此ascii一共可以表示128个字符
unicode每个字符占用两个字节(16位),可以用来表示汉字
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
关于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的个数就表示字符的字节数
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区别的更多相关文章
- Python中字符编码及转码
python 字符编码及转码 python 默认编码 python 2.X 默认的字符编码是ASCII, 默认的文件编码也是ASCII python 3.X 默认的字符编码是unicode,默认的文件 ...
- python的str,unicode对象的encode和decode方法, Python中字符编码的总结和对比bytes和str
python_2.x_unicode_to_str.py a = u"中文字符"; a.encode("GBK"); #打印: '\xd6\xd0\xce\xc ...
- python中的编码问题:以ascii和unicode为主线
1.unicode.gbk.gb2312.utf-8的关系 http://www.pythonclub.org/python-basic/encode-detail 这篇文章写的比较好,utf-8 ...
- Python的字符编码
Python的字符编码 1. Python字符编码简介 1. 1 ASCII Python解释器在加载.py文件的代码时,会对内容进行编码,一般默认为ASCII码.ASCII(American St ...
- Python常见字符编码间的转换
主要内容: 1.Unicode 和 UTF-8的爱恨纠葛 2.字符在硬盘上的存储 3.编码的转换 4.验证编码是否转换正确 5.Python bytes类型 前 ...
- 彻底搞懂Python的字符编码
前言:中文编码问题一直是程序员头疼的问题,而Python2中的字符编码足矣令新手抓狂.本文将尽量用通俗的语言带大家彻底的了解字符编码以及Python2和3中的各种编码问题. 一.什么是字符编码. 要彻 ...
- 转:Python常见字符编码及其之间的转换
参考:Python常见字符编码 + Python常见字符编码间的转换 一.Python常见字符编码 字符编码的常用种类介绍 第一种:ASCII码 ASCII(American Standard Cod ...
- Python基础-字符编码与转码
***了解计算机的底层原理*** Python全栈开发之Python基础-字符编码与转码 需知: 1.在python2默认编码是ASCII, python3里默认是utf-8 2.unicode 分为 ...
- 小话python 中的编码转换
1.前言: 一直认为自己会了,也明白了其中的知识,但是过几天不用就马上忘记了,总不能天天复习吧!还是来个好记性不如烂笔头吧! 2.编码: python解释器在加载 .py 文件中的代码时,会对内容进行 ...
随机推荐
- 配置 BizTalk Server
使用“基本配置”或“自定义配置”配置 BizTalk Server. 基本配置与自定义配置 如果配置使用域组,则进行“自定义配置”. 如果配置使用自定义组名称而不是默认组名称,则进行“自定 ...
- U68464 滑稽树上滑稽果(guo)
U68464 滑稽树上滑稽果(guo) 题目描述 小小迪有 n 个约会对象,每个对象有一个约会时长 p[i],小小迪 想尽可能多的去完成他的约会(假设小小迪可以瞬移),每个对象还有 一个忍耐时间 q[ ...
- Qt QLabel的使用
QLabel类主要用来文本和图像的显示,没有提供用户交互功能.QLabel对象的视觉外观可以由用户自定义配置. 它还可以为另外一个可获得焦点的控件作为焦点助力器. QLabel可以显示下列的所有类型: ...
- .net core 2.0 配置Session
本文章为原创文章,转载请注明出处 配置Session 在Startup.cs文件的ConfigureServices方法中添加session services.AddSession(); 在Start ...
- #194 sequence(搜索+动态规划+主席树)
考虑按顺序暴搜子序列.如果序列中的数两两不同,显然每次给上一个找到的子序列添上后缀最小值,即为下一个要找的子序列.如果不能再加了就回溯继续考虑后缀次小.第三小……值,直到找到k个子序列. 有重复的数后 ...
- Codeforces980 D. Perfect Groups
传送门:>Here< 题目大意:先抛出了一个问题——“已知一个序列,将此序列中的元素划分成几组(不需要连续)使得每一组中的任意两个数的乘积都是完全平方数.特殊的,一个数可以为一组.先要求最 ...
- 用二分法定义平方根函数(Bisection method Square Root Python)
Python里面有内置(Built-in)的平方根函数:sqrt(),可以方便计算正数的平方根.那么,如果要自己定义一个sqrt函数,该怎么解决呢? 解决思路: 1. 大于等于1的正数n的方根,范围 ...
- 【XSY2707】snow 线段树 并查集
题目描述 有\(n\)个人和一条长度为\(t\)的线段,每个人还有一个工作范围(是一个区间).最开始整条线段都是白的.定义每个人的工作长度是这个人的工作范围中白色部分的长度(会随着线段改变而改变).每 ...
- 【XSY1545】直径 虚树 DP
题目大意 给你一棵\(n\)个点的树,另外还有\(m\)棵树,第\(i\)棵树与原树的以\(r_i\)为根的子树形态相同.这\(m\)棵树之间也有连边,组成一颗大树.求这棵大树的直径长度. \(n ...
- Hdoj 2050.折线分割平面 题解
Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可以将平面 ...