encode()方法——编码字符串

自学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文件的运行效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙子味冰可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值