python——字符编码
Unicode 是字符集
UTF-8 是编码规则
Unicode:给每一个字符分配一个唯一的ID(又称码位)。
编码规则:将码位转换为字节序列的规则。
1、什么是字符编码:字符翻译成数字,所遵循的标准就是字符编码
2、以下两个场景涉及到字符编码的问题:
1.文件在存、取时
2.文件执行时
为什么硬盘中的文件不用Unicode编码形式存储。
Unicode: 转换速度快,缺点:占用空间大
Utf-8: 节省空间,缺点:转换速度慢。
因为Unicode和utf8的优缺点所以内存使用Unicode,硬盘上的字符编码可以用户自定义
unicode----->encode----->utf-8 存储
utf-8------->decode----->unicode 读取
常见的字符编码:
ASCII: 1Bytes = 1字符 =8bit,8bit:2**8-1=256个字符,无法表示中文。
GBK(可变长): 中文2字节,英文1字节
unicode(定长): 2字节, 虽然2**16-1=65535,但可以存放100w+个字符 。又名:万国码
UTF-8(可变长):英1Bytes,中3Bytes,生僻字占用更多Bytes。最大空间可以有6字节。
如何正确使用编码:
1、保存和读取时用的编码必须一致。
2、代码需要指定执行时的编码格式
3、bytes类型:由Unicode encode的结果
4、只有Unicode类型才可以调用encode方法,可以encode成GBK,UTF-8等编码形式(都是bytes类型)
程序执行的过程:
在python3中bytes类型与unicode相互转换:Encode、Decode
阶段一:启动python解释器
阶段二:程序加载到内存
1、Python3先解码成Unicode编码格式,再加载到内存(加载到内存的代码是unicode编码格式)
2、可以用sys.getdefaultencoding()查看Python中默认的解码方式。
3、行首:coding:xxx表示已什么编码格式解码成Unicode。python2中默认使用ascii解码,python3中默认使用utf-8解码
阶段三:执行
程序执行时,局部变量会开辟新的内存空间,在python2中字符串是bytes类型,Python3 中str就是以unicode形式保存的
Python2
str类型
1、在python2中字符串是bytes类型
2、当python解释器执行到产生字符串的代码时(例如x='上'),会申请新的内存地址,然后将'上'编码成文件开头指定的编码格式
3、要想看x在内存中的真实格式,就以列表形式打印,如果直接print()会自动转换编码,这一点我们稍后再说。
Python2自动把字符串encode了一下,编码方式来自于文件头的编码。
#coding:gbk
x='上'
print([x,y]) #['\xc9\xcf', '\xcf\xc2']
print(type(x),type(y)) #(<type 'str'>, <type 'str'>)
#\x代表16进制,此处是c9cf总共4位16进制数,一个16进制四4个比特位,
#4个16进制数则是16个比特位,即2个Bytes,这就证明了按照gbk编码中文用2Bytes
#coding:gbk
x=u'上' #等同于 x='上'.decode('gbk')
y=u'下' #等同于 y='下'.decode('gbk')
print([x,y]) #[u'\u4e0a', u'\u4e0b']
print(type(x),type(y)) #(<type 'unicode'>, <type 'unicode'>)
5.3.2 python3 中
Python3 中str就是以unicode形式保存的
#coding:gbk
x='上'
print(type(x)) #<class 'str'>
print(x.encode('gbk')) #b'\xc9\xcf'
print(type(x.encode('gbk'))) #<class 'bytes'>
python2中的str类型就是bytes类型,Python3中的str和bytes不是一回事。
python——字符编码的更多相关文章
- python 字符编码练习
通过下面的练习,加深对python字符编码的认识 # \x00 - \xff 256个字符 >>> a = range(256)>>> b = bytes(a) # ...
- Python字符编码讲解
声明:本文参考 Python字符编码详解 在计算机中我们不管用什么语言和程序,最终数据在计算机中的都是字节码(也就是01形式)的形式存在的,如果 计算机直接把字节码显示在屏幕上,很明显一般人看不懂字节 ...
- 深入理解Python字符编码--转
http://blog.51cto.com/9478652/2057896 不论你是有着多年经验的 Python 老司机还是刚入门 Python 不久,你一定遇到过UnicodeEncodeError ...
- 深入理解Python字符编码
不论你是有着多年经验的 Python 老司机还是刚入门 Python 不久,你一定遇到过UnicodeEncodeError.UnicodeDecodeError 错误,每当遇到错误我们就拿着 enc ...
- Python字符编码详解,str,bytes
什么是明文 “明文”是可以是文本,音乐,可以编码成mp3文件.明文可以是图像的,可以编码为gif.png或jpg文件.明文是电影的,可以编码成wmv文件.不一而足. 什么是编码?把明文变成计算机语言 ...
- Python字符编码补充
字符编码: Python字符编码贯穿Python学习的始终,现在应用的是Python2中字符编码的问题是很多的. 这次是要彻底解决Python字符编码的问题!!! 1 字符编码的发展过程: 1 .AS ...
- python --- 字符编码学习小结(二)
距离上一篇的python --- 字符编码学习小结(一)已经过去2年了,2年的时间里,确实也遇到了各种各样的字符编码问题,也能解决,但是每次都是把所有的方法都试一遍,然后终于正常.这种方法显然是不科学 ...
- 转1:Python字符编码详解
Python27字符编码详解 声明 一 字符编码基础 1 抽象字符清单ACR 2 已编码字符集CCS 3 字符编码格式CEF 31 ASCII初创 311 ASCII 312 EASCII 32 MB ...
- 转2:Python字符编码详解
1. 字符编码简介 1.1. ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有 ...
- python字符编码(二)
一.什么是字符编码 计算机要想工作必须通电,也就是说‘电’驱使计算机干活,而‘电’的特性,就是高低电压(高低压即二进制数1,低电压即二进制数0),也就是说计算机只认识数字 编程的目的是让计算机干活,而 ...
随机推荐
- BZOJ4524 [Cqoi2016]伪光滑数
BZOJ上的题面很乱,这里有一个题面. 题解: 正解是可持久化可并堆+DP,可惜我不会... 但暴力也可过这道题. 先在不超过N的前提下,在大根堆里加入每个质数的J次方,1<=j, 然后就可以发 ...
- __builtin_constant_p(x) (转帖
本文转载自:http://blog.chinaunix.net/uid-29254195-id-3977753.html gcc的内建函数,当x为常数时返回1, x为变量时返回0. 不过这并不完全准确 ...
- 解读 CSS 布局之水平垂直居中
对一个元素水平垂直居中,在我们的工作中是会经常遇到的,也是CSS布局中很重要的一部分,本文就来讲讲CSS水平垂直居中的一些方法.由于我们大搜车的日常工作中已经不再需要理会低版本IE,所以本文所贴出的方 ...
- BZOJ(begin) 1328 [Usaco2003 Open]Jumping Cows:贪心【波峰波谷模型】
题目链接:http://begin.lydsy.com/JudgeOnline/problem.php?id=1328 题意: 给你一个长度为n的正整数序列. 可以选任意个数字,只能从左往右选. 偶数 ...
- 分享知识-快乐自己:Excel快速导入Oracle 数据库
需求: oracle 数据库有一个student表,现有一个excel表:student.xlsx,需导入oracle数据库student表中. student表的拥有者是c##MLQ1 密码为:x ...
- POJ3107Godfather(求树的重心裸题)
Last years Chicago was full of gangster fights and strange murders. The chief of the police got real ...
- javacpp-FFmpeg系列之1:视频拉流解码成YUVJ420P,并保存为jpg图片
javacpp-ffmpeg系列: javacpp-FFmpeg系列之1:视频拉流解码成YUVJ420P,并保存为jpg图片 javacpp-FFmpeg系列之2:通用拉流解码器,支持视频拉流解码并转 ...
- 实际用户ID和有效用户ID (三) *****
我们知道权限有r,w,x.其实除了这三个,还有特殊权限.比如: [root@localhost ~]# ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 229 ...
- GET 和 POST两种调用方式
http://www.cnblogs.com/java-pan/archive/2012/02/26/httpclient-post-get.html 通过get和post方式调用http接口,总结如 ...
- installshield 6109错误解决方案
电脑重装了一下过后,运行打包程序就一直报6109错误,网上也没有查找出相关答案,真是急死了,后来无意发现输出项目的发布路径和当前自己setup的路径不一致,由于移动了文件夹位置,这个路径没有跟随修改, ...