概述
在使用Python或者其他的编程语言,都会多多少少遇到编码错误,处理起来非常痛苦。在Stack Overflow和其他的编程问答网站上,UnicodeDecodeError和UnicodeEncodeError也经常被提及。本篇教程希望能帮你认识Python编码,并能够从容的处理编码问题。
本教程提到的编码知识并不限定在Python,其他语言也大同小异,但我们依然会以Python为主,来演示和讲解编码知识。
通过该教程,你将学习到如下的知识:
- 获取有关字符编码和数字系统的概念
- 理解编码如何使用Python的str和bytes
- 通过int函数了解Python对数字系统的支持
- 熟悉Python字符编码和数字系统相关的内置函数
什么是字符编码
现在的编码规则已经有好多了,最简单、最基本是的ASCII编码,只要是你学过计算机相关的课程,你就应该多少了解一点ASCII编码,他是最小也是最适合了解字符编码原理的编码规则。具体如下:
- 小写英文字符:a-z
- 大写英文字符:A-Z
- 符号: 比如 $和!
- 空白符:回车、换行、空格等
- 一些不可打印的字符: 比如\b等
那么,字符编码的定义到底是什么了?它是一种将字符(如字母,标点符号,符号,空格和控制字符)转换为整数并最终转换为bit进行存储的方法。 每个字符都可以编码为唯一的bit序列。 如果你对bit的概念不了解,请不要担心,我们后面会介绍。
如果你依然在编程的世界里迷茫,可以加入我们的Python学习扣qun:784758214,看看前辈们是如何学习的。从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!每天分享一些学习的方法和需要注意的小细节,技术经验分享!点击加入我们的 python学习者聚集地
ASCII码的字符被分为如下几组:
ASCII表一共包括128个字符,如果你想了解整个ASCII表,这里有
Python string模块
string模块是python里处理字符串很方便的模块,它包括了整个ASCII字符,让我们来看看部分string模块源码:
# From lib/python3.7/string.py
whitespace = ' \t\n\r\v\f'
ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
ascii_letters = ascii_lowercase + ascii_uppercase
digits = '0123456789'
hexdigits = digits + 'abcdef' + 'ABCDEF'
octdigits = '01234567'
punctuation = r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
printable = digits + ascii_letters + punctuation + whitespace
你可以在Python中这样使用string模块:
>>> import string
>>> s = "What's wrong with ASCII?!?!?"
>>> s.rstrip(string.punctuation)
'What's wrong with ASCII'
什么是bit
学过计算机相关课程的同学,应该都知道,bit是计算机内部存储单位,只有0和1两个状态(二进制),我们上面所说的ASCII表,都是一个10进制的数字表示一个字符,而这个10进制数字,最终会转换成0和1,存储在计算机内部。例