用Php编码为base64与使用Python 3提供不同的结果

时间:2019-05-22 09:58:25

标签: php python-3.x base64

我正在尝试将Php中的代码转换为Python,它包括使用 base64_encode 函数对使用 chr 函数获得的变量和base64进行编码。

这是Php中的代码:

$data = chr(ord('a')+ord('b'));
$data = base64_encode($data);
echo $data;

结果:

ww==

这是我在Python中尝试做的事情:

from base64 import b64encode

data = chr(ord('a')+ord('b'))
data = b64encode(data.encode()) // data.encode() is mandatory or I get an error saying that b64encode require a bytes-like object
print(data)

结果:

b'w4M='

谢谢您的帮助

Aymeric

1 个答案:

答案 0 :(得分:0)

我不知道这是否是问题的真正答案,但问题是版本3中的python字符串使用unicode。因此可以替换php代码:

<?php
$data = chr(ord('a')+ord('b'));
$data = utf8_encode($data);

echo base64_encode($data); //w4M=

或者您可以为此使用https://www.php.net/manual/en/function.mb-chr.php

因此要更改python代码以使其像php一样工作-您需要在latin-1中对数据进行编码:

from base64 import b64encode

data = chr(ord('a')+ord('b')).encode('latin-1')
data = b64encode(data)

print(data) # b'ww=='
print(data.decode()) # ww==