自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501
语法参考
编码是将文本(字符串)转换成字节流,Unicode格式转换成其他编码格式。在Python中提供了encode()方法,该方法的作用是将Unicode编码转换成其他编码的字符串,如图1所示。如str1.encode('gbk'),表示将Unicode编码的字符串str1转换成GBK编码。
图1 编码解码示意图
encode()方法的语法格式如下:
str.encode([encoding="utf-8"][,errors="strict"])
参数说明:
l str:表示要进行转换的字符串。
l encoding="utf-8":可选参数,用于指定进行转码时采用的编码,默认为utf-8,如果是简体中文,可以设置为gb2312或gbk(与网站使用的编码方式有关)。当只有一个参数时,可以省略前面的“encoding=”,直接写编码。
l errors="strict":可选参数,用于指定错误处理方式,其可选择值可以是strict(遇到非法字符就抛出异常)、ignore(忽略非法字符)、replace(用“?”替换非法字符)或xmlcharrefreplace(使用XML的字符引用)等,默认值为strict。
说明:在使用encode()方法时,不会修改原字符串,如果需要修改原字符串,需要对其进行重新赋值。
快用锦囊
锦囊1 将指定字符串转为不同的编码格式
str='我爱Python' #定义字符串
utf8Str=str.encode(encoding='utf-8') #采用utf-8编码
gbkStr=str.encode(encoding='gbk') #采用GBK编码
print(utf8Str) #输出utf-8编码内容
print(gbkStr) #输出GBK编码内容
运行程序,输出结果为:
b'\xe6\x88\x91\xe7\x88\xb1Python'
b'\xce\xd2\xb0\xaePython'
锦囊2 Python中URL链接的编码处理
最近在豆瓣电影搜索《千与千寻》的时候发现搜素链接是这样的:
https://movie.douban.com/subject_search?search_text=%E5%8D%83%E4%B8%8E%E5%8D%83%E5%AF%BB&cat=1002
很明显“千与千寻”被编码成了%E5%8D%83%E4%B8%8E%E5%8D%83%E5%AF%BB,那么在Python中如何处理这种链接呢?
首先来了解下URL编码方法:URL编码方式是把需要编码的字符转化为%xx的形式。通常URL编码是基于utf-8,也可能是gbk或gb2312(这与网站使用的编码方式有关)。
测试下上述链接中URL编码是否为“千与千寻”,首先使用encode()方法将“千与千寻”的编码格式设置为utf-8,然后使用urllib模块的quote函数将转码后的字符串设置为URL编码,代码如下:
from urllib.parse import quote
from urllib.parse import unquote
#编码测试
mystr1 = '千与千寻'.encode('utf-8')
#使用urllib模块quote函数进行编码
mystr2 = quote(mystr1)
print(mystr2)
#使用urllib模块unquote函数进行解码
print(unquote(mystr2))
运行程序,输出结果为:
%E5%8D%83%E4%B8%8E%E5%8D%83%E5%AF%BB
将结果与链接中的字符串对比完全一样,那么这种编码方式可以通过urllib模块的unquote函数进行解码。
锦囊3 生成高考志愿填报时的姓名区位码
区位码是一个4位的十进制数,每个区位码都对应着一个唯一的汉字或符号,它的前两位叫做区码,后两位叫做位码。区位码的应用非常广泛,比如考生在填写高考志愿表或者涂抹答题卡时,都会要求填写自己姓名对应的区位码。下面使用encode()方法对汉字进行GB2312编码,然后根据区位码的生成算法(区位码 = GB2312内码 C 160<十六进制数A0>),使用生成的GB2312编码进行计算即可。实现代码如下:
'''
生成高考填报志愿时的姓名区位码
'''
def getCode(chinese):
'''
获取汉字对应区位码
:param chinese: 单个汉字
:return: 获取到的区位码
'''
barray = chinese.encode('gb2312') # 用GB2312对汉字进行编码
# 计算区位码(如果是1位,则格式为2位)
code = '{0:02d}'.format((barray[0] - 160)) + '{0:02d}'.format((barray[1] - 160))
return code # 返回区位码
while True: # 循环输入
name = input('请输入姓名:') # 记录输入的姓名
for word in name: # 遍历输入的姓名
print(word,':',getCode(word)) # 输入单个汉字及对应区位码
运行程序,输出结果为:
请输入姓名:高猿员
高 : 2463
猿 : 5219
员 : 5217
锦囊4 将字节类型的HTML代码写入文件
如果需要将字节类型的HTML代码写入文件时,首先需要设置open()函数中的“w”写入模式,然后再通过decode()方法对字节类型的字符串进行解码,最后再写入文件中。代码如下:
# 字节类型的html代码
html_bytes =bytes(b'<html>'
b'<head>'
b'<title>Python\xe7\xbc\x96\xe7\xa8\x8b\xe8\xaf\xad\xe8\xa8\x80</title>'
b'</head>'
b'<body>'
b'<p>\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8Python</p>'
b'</body>'
b'</html>')
# 以“w”模式进行写入
with open('html_bytes' + ".html", "w") as f:
# 将字节类型的html代码解码后写入文件中
f.write(html_bytes.decode('utf-8'))
运行程序,打开html_bytes.html文件,浏览器显示如图2所示。
图2 html_bytes.html文件的运行效果