微信公众号:码农充电站pro

个人主页:https://codeshellme.github.io

当你选择了一种语言,意味着你还选择了一组技术、一个社区。

—— Joshua Bloch

目录

1,什么是计算机编码

编码

信息从一种形式转换到另一种形式的过程,就叫做编码。说白了,编码就是信息的一种转换过程。

比如,信息的加密解密,这就是信息的一种转换过程,它是信息的明文与密文之间的转换过程。

还有不同国家文字的翻译,这是语言之间的一种转换过程。

那么,编码也是一种信息的转换过程。

计算机编码

计算机编码是信息的人类可读形式与计算机可读形式之间的一种转换过程。

实际上,计算机是一种人造的,很“”的机器,它只认识01 这样的二进制数据,也称为机器码

提示:计算机优势在于它的计算速度很快。

那么,计算机要想能够存储/展现我们人类可读的,丰富多彩的信息(比如文字,图片,音频,视频等),这就涉及到了计算机编码

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

UTF32Unicode 码 的一种实现,一般用4个字节表示一个字符,这样比较浪费存储空间。因为,一个英文字符只用1 个字节就可表示,一个常用汉字用2 个字节就可表示。

为了节省存储空间,UTF8 一般用1 到4 个字节表示一个字符,比如英文字符用1 个字节,常用汉字用2 个字节。

注意:UTF8Unicode 码的一种实现,比较常用。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 编码

strUnicode 互转

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 简明教程 --- 6,Python 控制流

Python 简明教程 --- 7,Python 字符串

Python 简明教程 --- 8,Python 字符串函数


欢迎关注作者公众号,获取更多技术干货。

Python 简明教程 --- 9,Python 编码的更多相关文章

  1. Python 简明教程 --- 13,Python 集合

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 如果代码和注释不一致,那很可能两者都错了. -- Norm Schryer 目录 前几节我们已经介绍 ...

  2. Python 简明教程 --- 14,Python 数据结构进阶

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 如果你发现特殊情况太多,那很可能是用错算法了. -- Carig Zerouni 目录 前几节我们介 ...

  3. Python 简明教程 --- 8,Python 字符串函数

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 好代码本身就是最好的文档.当你需要添加一个注释时,你应该考虑如何修改代码才能不需要注释. -- St ...

  4. Python 简明教程 ---10,Python 列表

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 程序 = 算法 + 数据结构 -- Nicklaus Wirth 目录 从这句话程序 = 算法 + ...

  5. Python 简明教程 --- 11,Python 元组

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 软件工程的目标是控制复杂度,而不是增加复杂性. -- Dr. Pamela Zave 目录 我们在上 ...

  6. Python 简明教程 --- 12,Python 字典

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 代码写的越急,程序跑得越慢. -- Roy Carlson 目录 Python 字典是另一种非常实用 ...

  7. Python 简明教程 --- 7,Python 字符串

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 过早的优化代码是罪恶之源. -- Donald Knuth 目录 无论哪种编程语言,字符串处理都是最 ...

  8. 《Python简明教程》总结

    Python经典教程<Python简明教程> 目录: 为什么Python 安装Python 体验Python Python数据类型 运算符与表达式 控制流 函数 模块 数据结构 解决问题 ...

  9. 【笔记】Python简明教程

    Python简明教程,此资源位于http://woodpecker.org.cn/abyteofpython_cn/chinese/ s=u'中文字符' #u表示unicode,使用u之后能正常显示中 ...

随机推荐

  1. 关于ubuntu下使用l2tpvpn和远程桌面windows系统的测试

    一.背景: 2019年9月下旬到10月上旬,到海南澄迈福山度假.随身带的笔记本电脑中windows10系统因硬盘故障挂了,在另一块硬盘上的ubuntu18.04系统正常.因媳妇需要在10月1日远程回公 ...

  2. Java实现 LeetCode 834 树中距离之和(DFS+分析)

    834. 树中距离之和 给定一个无向.连通的树.树中有 N 个标记为 0-N-1 的节点以及 N-1 条边 . 第 i 条边连接节点 edges[i][0] 和 edges[i][1] . 返回一个表 ...

  3. Java实现 LeetCode 757 设置交集大小至少为2(排序+滑动窗口)

    757. 设置交集大小至少为2 一个整数区间 [a, b] ( a < b ) 代表着从 a 到 b 的所有连续整数,包括 a 和 b. 给你一组整数区间intervals,请找到一个最小的集合 ...

  4. Java实现 蓝桥杯 算法提高 上帝造题五分钟

    算法提高 上帝造题五分钟 时间限制:1.0s 内存限制:256.0MB 问题描述 第一分钟,上帝说:要有题.于是就有了L,Y,M,C 第二分钟,LYC说:要有向量.于是就有了长度为n写满随机整数的向量 ...

  5. java实现还款计算

    标题: 还款计算 银行贷款的等额本息还款方法是: 每月还固定的金额,在约定的期数内正好还完(最后一个月可能会有微小的零头出入). 比如说小明在银行贷款1万元.贷款年化利率为5%,贷款期限为24个月. ...

  6. java实现硬币方案

    标题:硬币方案 有50枚硬币,可能包括4种类型:1元,5角,1角,5分. 已知总价值为20元.求各种硬币的数量. 比如:2,34,6,8 就是一种答案. 而 2,33,15,0 是另一个可能的答案,显 ...

  7. java实现高斯日记

    题目标题: 高斯日记 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯 ...

  8. Linux fdisk手动分区

    查询系统中可以被识别的硬盘:fdisk -l 可以看到,我的服务器只有一块硬盘,容量是53.7GB,有1个分区,文件系统类型是Linux,Id 是83(82是Linux swap分区,相当于Windo ...

  9. 【JVM故事】了解JVM的结构,好在面试时吹牛

    class文件格式 参考上一篇文章<[JVM故事]一个Java字节码文件的诞生记>,后续还会专门讲解class文件的内部结构. 数据类型 jvm包括两种数据类型,基本类型和引用类型. 基本 ...

  10. iOS-PCH File的快速导入方法和使用

    PCH的文件的用途:      在实际的项目开发中,如果很多地方都在使用某个类的头文件,很多地方都在使用同一个”宏”的时候:很多地方用到了NSLog()函数, 在app发布的时候,想清除掉时,此时就需 ...