#python #c# #arrays #base64
#python #c# #массивы #base64
Вопрос:
Я пытаюсь преобразовать функцию из C # в python.
Мой код на C #:
static string Base64Encode(string plainText)
{
char[] arr = plainText.ToCharArray();
List<byte> code16 = new List<byte>();
int i = 1;
string note = "";
foreach (char row in arr)
{
if (i == 1)
{
note = "0x" row;
}
else if (i == 2)
{
note = row;
code16.Add(Convert.ToByte(note, 16));
note = "";
i = 0;
}
i ;
}
return System.Convert.ToBase64String(code16.ToArray());
}
Мой код на Python:
def Base64Ecode(plainText):
code16 = []
i = 1
note = ''
for row in plainText:
if i == 1:
note = '0x' row
elif i == 2:
note = row
code16.append(int(note, 16))
note = ''
i = 0
i = 1
test = ''
for blah in code16:
test = chr(blah)
print(base64.b64encode(test.encode()))
Оба code16
значения одинаковы, но у меня возникает проблема, когда я пытаюсь base64
закодировать данные.
C # принимает массив байтов, но pyton принимает строку, и я получаю два разных результата.
Комментарии:
1. Вы пробовали отлаживать это? Строка / символы могут быть закодированы по-разному
2. Оба массива кажутся одинаковыми (code16), но я застрял на преобразовании массива в значение для передачи в b64encode в python
3. Привет, ты нашел решение? Я столкнулся с той же проблемой, приведенный ниже ответ не работает.
Ответ №1:
string.encode()
по умолчанию используется кодировка utf-8, которая, вероятно, создает несколько нежелательных многобайтовых символов.
Используется string.encode("latin1")
для создания байтов из 00
в FF
.
Тем не менее, в python есть более простой метод преобразования шестнадцатеричной строки в bytearray (или объект bytes):
base64.b64encode(bytes.fromhex(plainText))
дает тот же результат, что и ваша функция.