Преобразование C # в кодировку Python base64

#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))
  

дает тот же результат, что и ваша функция.