知行编程网知行编程网  2022-11-12 04:30 知行编程网 隐藏边栏  2 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于Python中怎么处理字符编码问题的相关知识,包括python获取字符串编码,以及最普遍的汉字字符编码这些编程知识,希望对大家有参考作用。

Python 可以使用 base64 来处理字符编码问题,Base64 是一种用 64 个字符表示任意二进制数据的方法。

用记事本打开exe、jpg、pdf等文件时,我们会看到很多乱码,因为二进制文件中包含很多无法显示和打印的字符。因此,如果要制作记事本等文本处理软件来处理二进制数据,就需要一种二进制转字符串的方法。 Base64 是最常见的二进制编码方法之一。

如何处理 Python 中的字符编码问题

Base64的原理很简单。首先,准备一个包含 64 个字符的数组:

['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']

然后,处理二进制数据,每组3个字节,一共3x8=24bit,分成4组,每组正好是6位

这样,我们得到4个数字作为索引,然后查表得到对应的4个字符,也就是编码后的字符串。

所以Base64编码会将3字节的二进制数据编码成4字节的文本数据,长度会增加33%。优点是编码后的文本数据可以直接显示在邮件正文、网页等中。

如果要编码的二进制数据不是3的倍数,最后会剩下1或2个字节怎么办? Base64在末尾补了\x00字节后,在编码末尾加1或2=符号表示补了多少字节。解码时会自动删除。

Python内置的base64可以直接进行base64的编解码:

>>> import base64
>>> base64.b64encode('binary\x00string')
'YmluYXJ5AHN0cmluZw=='
>>> base64.b64decode('YmluYXJ5AHN0cmluZw==')
'binary\x00string'

由于字符 + 和 / 可能出现在标准 Base64 编码之后,因此不能直接作为 URL 中的参数,因此还有另一种“url 安全”的 base64 编码,实际上是将字符 + 和 / 分别变成 - 和 _:

>>> base64.b64encode('i\xb7\x1d\xfb\xef\xff')
'abcd++//'
>>> base64.urlsafe_b64encode('i\xb7\x1d\xfb\xef\xff')
'abcd--__'
>>> base64.urlsafe_b64decode('abcd--__')
'i\xb7\x1d\xfb\xef\xff'

也可以自己定义 64 个字符的排列顺序,这样就可以自定义 Base64 编码,但是通常完全没有必要。

Base64 是一种使用查找表的编码方式,不能用于加密,即使使用自定义编码表也是如此。

Base64 适用于对小块内容进行编码,例如数字证书签名、cookie 内容等。

由于 = 字符也可能出现在 Base64 编码中,但在 URL 和 cookie 中使用 = 会导致歧义。因此,许多 Base64 编码将删除 =:

# 标准Base64:
'abcd' -> 'YWJjZA=='
# 自动去掉=:
'abcd' -> 'YWJjZA'

删除=后如何解码?因为Base64把3个字节变成了4个字节,所以Base64编码的长度总是4的倍数。所以需要加=,把Base64字符串的长度变成4的倍数,就可以正常解码了。 .

请写一个能处理去掉=的base64解码函数:

>>> base64.b64decode('YWJjZA==')
'abcd'
>>> base64.b64decode('YWJjZA')
Traceback (most recent call last):
 ...
TypeError: Incorrect padding
>>> safe_b64decode('YWJjZA')
'abcd'


小结

Base64 是一种任意二进制转文本字符串编码方法,常用于在 URL、cookie 和网页中传输少量二进制数据。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享