Python 简明教程 --- 9,Python 编码
微信公众号:码农充电站pro
个人主页:https://codeshellme.github.io
当你选择了一种语言,意味着你还选择了一组技术、一个社区。
—— Joshua Bloch
目录
1,什么是计算机编码
编码
信息
从一种形式转换
到另一种形式的过程,就叫做编码
。说白了,编码就是信息的一种转换过程。
比如,信息的加密解密
,这就是信息的一种转换过程,它是信息的明文与密文之间的转换过程。
还有不同国家文字的翻译,这是语言之间的一种转换过程。
那么,编码
也是一种信息的转换过程。
计算机编码
计算机编码
是信息的人类可读
形式与计算机可读
形式之间的一种转换过程。
实际上,计算机是一种人造的,很“笨
”的机器,它只认识0
和1
这样的二进制数据
,也称为机器码
。
提示:计算机优势在于它的计算速度很快。
那么,计算机要想能够存储/展现
我们人类可读的,丰富多彩的信息(比如文字,图片,音频,视频等),这就涉及到了计算机编码
。
ASCII 码
ASCII 码
(美国信息交换标准码),是最早的,也是较为简单的一种计算机编码。其主要用于表示英文字符,数字和一些标点符号。
比如,二进制数字01000001
(十进制为65
)就表示大写字母A
。
GB2312
ASCII 码
虽能表示英文,但是无法表示其它语言,比如中文,韩文等。
为了表示中文,中国国家标准总局
发布了GB2312
(信息交换用汉字编码字符集),专门用于表示中文信息。
比如,十六进制D6D0
表示汉字中
。
Unicode 码
世界上有很多的国家,每个国家都需要表示自己的文字,这就有了各种各样的计算机编码。每个国家都有自己的编码,这就不方便统一,也没有通用性。
为了统一不同国家的编码,表示不同国家的文字,诞生了Unicode 码
,俗称万国码
。Unicode 码
为每种语言中的每个字符设定了统一且唯一的二进制编码。
比如,十六进制4E2D
表示汉字中
。
UTF8
Unicode 码
实际上是一个字符集
,它只规定了二进制
与各个字符
之间的对应关系,并没有规定如何在磁盘上存储(用几个字节
来表示)。
提示:
字节
是计算机存储的最小单位
1024 字节为1 K
1024 K 为1 M
1024 M 为1 G
UTF32
是Unicode 码
的一种实现,一般用4
个字节表示一个字符,这样比较浪费存储空间。因为,一个英文字符只用1
个字节就可表示,一个常用汉字用2
个字节就可表示。
为了节省存储空间,UTF8
一般用1 到4
个字节表示一个字符,比如英文字符用1
个字节,常用汉字用2
个字节。
注意:
UTF8
是Unicode 码
的一种实现,比较常用。UTF8
使用变长
字节来表示字符,意思就是,使用的字节数
是可变的。
2,Python3 源文件编码
在Python2.x
中,Python 源代码文件默认以ASCII 码
格式编码。因此,在Python2.x
中,默认情况下,是不支持中文的。如果强制写中文,则会出现以下错误:
SyntaxError: Non-ASCII character ...
如果想在Python2.x
源代码文件中输入中文字符,可以使用UTF8
编码,需要在代码文件的开头添加:
# -*- coding: UTF-8 -*-
或者:
# coding=utf-8
在Python3.x
中,Python 源代码文件会统一采用Unicode
编码,默认以UTF8
格式编码,就不需要在代码开头添加上面的代码。
3,Python3 字符串与编码
str
类型
上一节介绍了Python 字符串的相关操作,这里我们介绍一下Python 字符串与编码。
Python3
中的字符串
类型<class 'str'>
统一采用Unicode
编码,因此支持多种语言。
>>> print('中文') # 中文
中文
>>>
>>> print('english') # 英文
english
bytes
类型
当str
类型需要磁盘存储
或者网络传输
时,就需要转换为bytes
类型。
bytes
是一个二进制类型,它需要在str
之前加上b
:
>>> type(b'abc')
<class 'bytes'>
bytes
中只能包含ASCII
字符,若有非ASCII
字符,则会报错:
>>> s = b'中国'
File "<stdin>", line 1
SyntaxError: bytes can only contain ASCII literal characters.
str
转为 bytes
str
类型转换为bytes
类型,需要使用str
中的encode
方法,参数utf8
是编码格式:
>>> s = '中国'
>>> s.encode('utf8')
b'\xe4\xb8\xad\xe5\x9b\xbd'
bytes
转为 str
bytes
类型转换为str
类型,需要使用bytes
中的decode
方法,参数utf8
是编码格式:
>>> s = b'\xe4\xb8\xad\xe5\x9b\xbd'
>>> s.decode('utf8')
'中国'
注意:当
str
类型与bytes
类型互转时,推荐使用UTF8
编码
str
与Unicode
互转
将str
转换为Unicode
:
>>> '中国'.encode('unicode-escape')
b'\\u4e2d\\u56fd'
将Unicode
转换为str
:
>>> b'\\u4e2d\\u56fd'.decode('unicode-escape')
'中国'
4,ord()
与 chr()
ord()
函数用于获取一个字符的十进制整数表示,chr()
是 ord()
的反操作:
>>> ord('a')
97
>>> chr(97)
'a'
>>> ord('中')
20013
>>> chr(20013)
'中'
(完。)
推荐阅读:
Python 简明教程 --- 4,Python 变量与基本数据类型
Python 简明教程 --- 5,Python 表达式与运算符
Python 简明教程 --- 8,Python 字符串函数
欢迎关注作者公众号,获取更多技术干货。
Python 简明教程 --- 9,Python 编码的更多相关文章
- Python 简明教程 --- 13,Python 集合
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 如果代码和注释不一致,那很可能两者都错了. -- Norm Schryer 目录 前几节我们已经介绍 ...
- Python 简明教程 --- 14,Python 数据结构进阶
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 如果你发现特殊情况太多,那很可能是用错算法了. -- Carig Zerouni 目录 前几节我们介 ...
- Python 简明教程 --- 8,Python 字符串函数
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 好代码本身就是最好的文档.当你需要添加一个注释时,你应该考虑如何修改代码才能不需要注释. -- St ...
- Python 简明教程 ---10,Python 列表
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 程序 = 算法 + 数据结构 -- Nicklaus Wirth 目录 从这句话程序 = 算法 + ...
- Python 简明教程 --- 11,Python 元组
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 软件工程的目标是控制复杂度,而不是增加复杂性. -- Dr. Pamela Zave 目录 我们在上 ...
- Python 简明教程 --- 12,Python 字典
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 代码写的越急,程序跑得越慢. -- Roy Carlson 目录 Python 字典是另一种非常实用 ...
- Python 简明教程 --- 7,Python 字符串
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 过早的优化代码是罪恶之源. -- Donald Knuth 目录 无论哪种编程语言,字符串处理都是最 ...
- 《Python简明教程》总结
Python经典教程<Python简明教程> 目录: 为什么Python 安装Python 体验Python Python数据类型 运算符与表达式 控制流 函数 模块 数据结构 解决问题 ...
- 【笔记】Python简明教程
Python简明教程,此资源位于http://woodpecker.org.cn/abyteofpython_cn/chinese/ s=u'中文字符' #u表示unicode,使用u之后能正常显示中 ...
随机推荐
- data类型的url
所谓"data"类型的Url格式,是在RFC2397中 提出的,目的对于一些"小"的数据,可以在网页中直接嵌入,而不是从外部文件载入.例如对于img这个Ta ...
- docker出现相同的image条目的删除办法
一.问题:在测试docker安装的prometheus系统时,由于异常操作,使用docker image ls出现了两条一模一样的条目,如下: [root@ELK prometheus]# docke ...
- Rocket - util - PrefixSum
https://mp.weixin.qq.com/s/G2vLP-ncoJzSOgxGGEJkfA 简单介绍PrefixSum的实现. 1. 基本介绍 把一个序列从前向后逐 ...
- Chisel3 - util - MixedVec
https://mp.weixin.qq.com/s/mO648yx4_ZRedXSWX4Gj2g 可以容纳不同类型的变量的向量. 参考链接: https://github.com/freec ...
- 快速搭建Spring Boot + Apache Shiro 环境
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.Apache Shiro 介绍及概念 概念:Apache Shiro是一个强大且易用的Java安全框 ...
- Java实现 蓝桥杯 算法训练 第五次作业:字符串排序
试题 算法训练 第五次作业:字符串排序 问题描述 输入一个小写字符串,按从小到大的顺序输出. 输入格式 bcaed 输出格式 abcde 顶格输出,中间没有空格 样例输入 一个满足题目要求的输入范例. ...
- (Java实现) 车厢重组
[问题描述] 在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转.一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转180度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排 ...
- Java实现 LeetCode 654 最大二叉树(递归)
654. 最大二叉树 给定一个不含重复元素的整数数组.一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素. 左子树是通过数组中最大值左边部分构造出的最大二叉树. 右子树是通过数组中最 ...
- Java实现 LeetCode 217 存在重复元素
217. 存在重复元素 给定一个整数数组,判断是否存在重复元素. 如果任何值在数组中出现至少两次,函数返回 true.如果数组中每个元素都不相同,则返回 false. 示例 1: 输入: [1,2,3 ...
- 【JVM故事】一个Java字节码文件的诞生记
万字长文,完全虚构. (一) 组里来了个实习生,李大胖面完之后,觉得水平一般,但还是留了下来,为什么呢?各自猜去吧. 李大胖也在心里开导自己,学生嘛,不能要求太高,只要肯上进,慢慢来.就称呼为小白吧. ...