UnicodeDecodeError 'ascii' code c не может декодировать байт с помощью укропа - PullRequest
0 голосов
/ 05 марта 2020

У меня есть функция, которая выглядит примерно так:

def status_function():
    # function doing something
    return 'OK'

Я беру код этой функции и кодирую его:

def create_serialized_from_function(pysome_function_func):
    dill_serialized = dill.dumps(some_function.__code__)
    byte_str = base64.b64encode(dill_serialized)
    py_str = byte_str.decode('ascii')
    return dict(serialized=py_str)

А затем я отправил в другую службу, используя запросы:

send_data = create_serialized_from_function(status_function)
response = requests.post('some_url', json=send_data)

Все вышеперечисленное должно работать на python 2 или 3.

Служба, которая получает эту закодированную функцию, работает на python 3 и выглядит примерно так :

py_str = send_data['serialized']
print(py_str)
print(type(py_str))
byte_str = py_str.encode('ascii')
dill_serialized = base64.b64decode(byte_str)
print(dill_serialized)
print(type(dill_serialized))
dill_after_load = dill.loads(dill_serialized)

Это хорошо работает, если верхний сервис работает на python 3, но возникают проблемы, если он переключен на python 2.

А именно, я получаю UnicodeDecodeError: ' ascii 'code c не может декодировать байт 0x83 в позиции 9 при попытке выполнить

dill_after_load = dill.loads(dill_serialized)

Я пробовал все способы кодирования и декодирования, чтобы попытаться получить строку, похожую, но ничего не кажется работать.

1021 * Результаты выступлений печати: 1023 *PYTHON 3

gANjZGlsbC5fZGlsbApfbG9hZF90eXBlCnEAWAgAAABDb2RlVHlwZXEBhXECUnEDKEsBSwBLAUsDS1NDDnwAoABkAaEBAQBkAlMAcQROWBoAAABodHRwOi8vdHJhY2tlcjo4MDg4L2hlYWx0aHEFWAIAAABPS3EGh3EHWAMAAABnZXRxCIVxCVgGAAAAZHJpdmVycQqFcQtYMQAAAC9ob21lL3ZtYWdlbnQvYXBwL3RyYWNrZXIvdHJhY2tlci9icm93c2VyX3Rlc3QucHlxDFgPAAAAaGVhbHRoX2Z1bmN0aW9ucQ1LEUMEAAEKAXEOKSl0cQ9ScRAu

1027 * класс 'ул' 1029 * б '\ x80 \ x03cdill ._dill \ n_load_type \ пд \ x00X \ x08 \ x00 \ x00 \ x00CodeTypeq \ x01 \ x85q \ x02Rq \ x03 (K \ x01K \ x00K \ x01K \ x03KSC \ x0e | \ x00 \ xa0 \ x00d \ x01 \ xa1 \ x01 \ x01 \ x00d \ x02S \ x00q \ x04NX \ x1a \ x00 \ x00 \ x00 http://tracker: 8088 / healthq \ x05X \ x02 \ x00 \ x00 \ x00OKq \ x06 \ x87q \ x07X \ x03 \ x00 \ x00 \ x00getq \ x08 \ x85q \ ТХ \ x06 \ x00 \ x00 \ x00driverq \ п \ x85q \ x0bX1 \ x00 \ x00 \ x00 / дома / vmagent / приложение / трекер / трекер / browser_test.pyq \ x0cX \ X0F \ x00 \ x00 \ x00health_functionq \ гк \ x11C \ x04 \ x00 \ x01 \ n \ x01q \ x0e)) tq \ x0fRq \ x10. '

class' bytes '

PYTHON 2

gAJjZGlsbC5fZGlsbApfbG9hln2BhB0E0B0HBF2R0B0F0R0F0R0B0HBF2R0B0B0B0B0B0B0B0B0HBF2B VHlwZXEBhXECUnEDKEsBSwFLAktTVRF8AABqAABkAQCDAQABZAIAU3EETlUaaHR0cDovL3RyYWNrZXI6ODA4OC9oZWFsdGhxBVUCT0txBodxB1UDZ2V0cQiFcQlVBmRyaXZlcnEKhXELVTEvaG9tZS92bWFnZW50L2FwcC90cmFja2VyL3RyYWNrZXIvYnJvd3Nlcl90ZXN0LnB5cQxVD2hlYWx0aF9mdW5jdGlvbnENSxFVBAABDQFxDikpdHEPUnEQLg == класс 'ул'

1038 * б '\ x80 \ x02cdill._dill \ n_load_type \ пд \ x00U \ x08CodeTypeq \ x01 \ x85q \ x02Rq \ x03 (K \ x01K \ x01K \ x02KSU \ x11 | \ x00 \ x00j \ x00 \ x00d \ x01 \ x00 \ x83 \ x01 \ x00 \ x01d \ x02 \ x00Sq \ x04NU \ x1a http://tracker: 8088 / healthq \ x05U \ x02OKq \ x06 \ x87q \ x07U \ x03getq \ x08 \ x85q \ tử \ x06driverq \ п \ x85q \ x0bU1 / дома / vmagent / приложение / трекер / трекер / browser_test.pyq \ x0cU \ x0fhealth_functionq \ гк \ x11U \ x04 \ x00 \ x01 \ г \ x01q \ x0e)) TQ \ x0fRq \ x10 . '

класс' bytes '

...