Python你必须要知道的编码问题 否则可能会困扰你很久

鳄鱼君

发表文章数:642

Vieu四代商业主题

高扩展、安全、稳定、响应式布局多功能模板。

¥69 现在购买
首页 » Python » Python你必须要知道的编码问题 否则可能会困扰你很久

字符编码这个问题,你在刚开始学习Python时就要彻底搞清楚,不然你后面会在编码上浪费很多时间。在此之前你需要知道以下的历史:

最早的字符串编码是 ASCII 编码,它仅仅对 10 个数字、26 个大小写英文字母以及一些特殊字符进行了编码。ASCII 码做多只能表示 256 个符号,每个字符只需要占用 1 个字节。

随着信息技术的发展,各国的文字都需要进行编码,于是相继出现了 GBK、GB2312、UTF-8 编码等,其中 GBK 和 GB2312 是我国制定的中文编码标准,规定英文字符母占用 1 个字节,中文字符占用 2 个字节;而 UTF-8 是国际通过的编码格式,它包含了全世界所有国家需要用到的字符,其规定英文字符占用 1 个字节,中文字符占用 3 个字节。

Python 3.x 默认采用 UTF-8 编码格式,有效地解决了中文乱码的问题。在 Python 中,有 2 种常用的字符串类型,分别为 str 和 bytes 类型,其中 str 用来表示 Unicode 字符bytes 用来表示二进制数据。str 类型和 bytes 类型之间就需要使用 encode() 和 decode() 方法进行转换。虽然我们学习的是Python3.x,但是我们呢也需要知道不同类型是如何转换,它对于你后面的学习非常的有帮助!

encode()

encode百度翻译过来是编码,encode() 方法为字符串类型(str)提供的方法,用于将 str 类型转换成 bytes 类型,这个过程也确实叫做“编码”

str.encode([encoding="utf-8"][,errors="strict"])

decode()解码

那么decode在百度翻译的结果就是解码,decode() 方法用于将 bytes 类型的二进制数据转换为 str 类型,这个过程叫做“解码”

bytes.decode([encoding="utf-8"][,errors="strict"])

上面的是一种默认的用法,我们在不写encode的参数和decode参数的时候,默认是以utf-8编码然后解码的,如果在其它编码之间转换,就需要加上参数,否则就是utf-8。不同编码之间的转换,都需要经过unicode,如同一个中介,请牢记下图的转换方式:

Python你必须要知道的编码问题 否则可能会困扰你很久

一些案例

现在你只需要知道在sys模块哟个getdefaultencoding()方法,它可以查看当前程序的默认编码,type()函数用来查看类型。

import sys
print(sys.getdefaultencoding()) #默认utf-8,该方法是查看文件编码

f='我是一个unicode字符串'
#前面说过,Python的字符串默认是unicode,可以转换为gbk,类型是一个字节bytes
print(f.encode('gbk'),type(f.encode('gbk'))) 

#utf-8可以转换为gb2312
print(f.encode('gb2312'))
#gb2312也可转utf-8
print(f.encode('gb2312').decode('gb2312'))

Python对bytes类型的数据用带b前缀的单引号或双引号表示:

x = b'ABC'
print(type(x))

#<class 'bytes'>
#这是一种字节类型

len()函数可以计算字符数,我们计算一下字节的字符数:

print(len(b'ABC'))
print(len(b'\xe4\xb8\xad\xe6\x96\x87'),'中文'.encode())#encode()字符串编码为字节

可见,1个中文字符经过UTF-8编码后通常会占用3个字节,而1个英文字符只占用1个字节。

由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

这是一种很好的代码规范,你必须要遵守。那么我们在以后的学习中,重点就是知道如何进行不同编码之间的转为,熟练的使用encode编码和decode解码

未经允许不得转载:作者:鳄鱼君, 转载或复制请以 超链接形式 并注明出处 鳄鱼君
原文地址:《Python你必须要知道的编码问题 否则可能会困扰你很久》 发布于2019-12-06

分享到:
赞(2) 赏杯咖啡

评论 抢沙发

2 + 9 =


文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册