Кодирование в base64 с Php дает другой результат, чем с Python 3 - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь преобразовать код в Php в Python, он состоит из кодирования переменной, полученной с помощью функции chr с base64, с использованием функции base64_encode .

Вот код в 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 голосов
/ 22 мая 2019

Я не знаю, является ли это реальным ответом на вопрос, но проблема в том, что строка Python версии 3 в 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 - вам нужно закодировать данные в латинице-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==
...