python版本之间的不同base64编码

时间:2017-06-23 19:07:15

标签: python-2.7 utf-8 base64 python-3.5

我无法通过JSON发送HTML代码。

我注意到我的字符串值在python版本(2.7和3.5)之间是不同的

我的字符串类似于:<html><p>PAÇOCA</p></html>

Python 2.7

x = '<html><p>PAÇOCA</p></html>'
base64.b64encode(x)
=> PGh0bWw+PHA+UEGAT0NBPC9wPjwvaHRtbD4=

Python 3.5

x = '<html><p>PAÇOCA</p></html>'
base64.b64encode(x)
=> b'PGh0bWw+PHA+UEHDh09DQTwvcD48L2h0bWw+'

为什么这些值不同? 如何使 3.5 字符串等于 2.7

由于重音丢失,这导致我收到电子邮件的麻烦。

1 个答案:

答案 0 :(得分:1)

您的示例x值无效,因此很难分辨代码出错的地方,但答案是使用Unicode字符串并对其进行显式编码以获得一致的答案。下面的代码在Python 2和3中给出了相同的答案,尽管Python 3在打印时用b''装饰字节字符串。将源文件保存在通过#coding声明的编码中。源代码编码可以是支持源文件中使用的字符的任何编码。通常情况下,UTF-8用于非ASCII源代码,但我故意将它与故意不同以表明无关紧要。

#coding:cp1252
from __future__ import print_function
import base64
x = u'<html><p>PAÇOCA</p></html>'.encode('utf8')
enc = base64.b64encode(x)
print(enc)

使用Pylauncher输出以选择主要的Python版本:

C:\>py -2 test.py
PGh0bWw+PHA+UEHDh09DQTwvcD48L2h0bWw+

C:\>py -3 test.py
b'PGh0bWw+PHA+UEHDh09DQTwvcD48L2h0bWw+'