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),也就是说计算机只认识数字 编程的目的是让计算机干活,而 ...
随机推荐
- 分享知识-快乐自己:Hibernate 中的 HQL 语句的实际应用
概要: Hibernate 支持三种查询方式: HQL查询.Criteria查询及原声 SQL (Native SQL)查询. HQL(Hibernate Query Language,Hiberna ...
- findbugs规则
FindBugs是基于Bug Patterns概念,查找javabytecode(.class文件)中的潜在bug,主要检查bytecode中的bug patterns,如NullPoint空指针检查 ...
- composer镜像安装laravel
博主最近在学习Laravel的框架的相关知识,对于Laravel的许多新特性,大家最好还是去查看官网文档最好,Laravel的文档非常完善,中文英文的都有,可以很好的解决你的困惑. 但是我们会发现学习 ...
- 洛谷 P2962 [USACO09NOV]灯Lights
题目描述 Bessie and the cows were playing games in the barn, but the power was reset and the lights were ...
- poj2955——括号匹配
题目:http://poj.org/problem?id=2955 区间DP. 代码如下: #include<iostream> #include<cstdio> #inclu ...
- 一 Kubernetes介绍
Kubenetes是一款由Google开发的开源的容器编排工具,它可以解决以下分布式环境下的问题: 调度 你已经得到了这个很棒的基于容器的应用程序? 太棒了!现在你需要确保它能够运行在它应该运行的地方 ...
- JS--改变div大小
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 数据字典生成工具(生成Excel, Word,PDF,html)
转自:http://www.cnblogs.com/yanweidie/p/3838765.html 数据字典生成工具之旅系列文章导航 数据字典生成工具之旅系列文章导航 宣传语 数据字典生成工具.数据 ...
- day1 java基础回顾-IO流
IO流的分类 注:这几个类都是抽象类. IO解决问题: 解决设备与设备之间 的数据传输问题. 比如: 硬盘--->内存 内存----->硬盘 字节流: 输入字节流:---------| I ...
- ASP.NET中 TextBox 文本输入框控件的使用方法
TextBox控件又称文本框控件,为用户提供输入文本的功能. 1.属性 TextBox控件的常用属性及说明如表1所示. 表1 TextBox控件常用属性及说明 属性 说明 AutoPostBack 获 ...