字符编码在python中的处理_如何处理python中的字符编码问题

Python中可以使用base64来处理字符编码问题,Base64是一种用64个字符来表示任意二进制数据的方法。用记事本打开exe、jpg、pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的文本处理软件能处理二进制数据,就需要一个二



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

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

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

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

然后,处理二进制数据,每组3个字节,总计 3x8 = 24bit,分为4组,每组正好有6位

获取4个数字作为索引,然后查询表以获取对应的4个字符,即 编码的字符串。

python学习课程约会提醒

Region:

北京

天津

上海

江苏

浙江

山东

江西

安徽

广东

广西

海南

辽宁

吉林

黑龙江

内蒙古

山西

福建

河南

河北

湖南

湖北

四川

重庆

云南

贵州

新疆

西藏

陕西

青海

宁夏

]甘肃

名称:

移动设备:

提交

因此,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 ==')[k0 ]

'abcd'

>>> base64.b64decode('YWJjZA')

跟踪(最近一次通话最近):

...

TypeError:不正确的填充

>>> safe_b64decode('YWJjZA')

'abcd'

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值