Декодирование строки JSON в кодировке base64, сгенерированной из JavaScript в Python

#javascript #python #json #unicode #base64

#javascript #python #json #юникод #base64

Вопрос:

Возьмите эту строку JSON в кодировке base64, сгенерированную из JavaScript, используя JSON.stringify и btoa :

 btoa(JSON.stringify({"é": "è"}))
"eyLpIjoi6CJ9"
 

Я пытаюсь расшифровать ее из Python. Я делаю:

 >>> import base64
>>> import json
>>> json.loads(base64.b64decode("eyLpIjoi6CJ9"))
 

Я получаю UnicodeDecodeError :

 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 2: invalid continuation byte
 

Как правильно правильно декодировать это в Python?

Примечание: я использую кодировку base64, поэтому ее можно безопасно передать в качестве параметра строки запроса URL.

Спасибо!

Ответ №1:

Вы также можете выполнить в JavaScript

     btoa(unescape(encodeURIComponent(JSON.stringify({"é": "è"}))))
    base64 output: eyLDqSI6IsOoIn0=
 

хотя я думаю, что btoa работает только с расширенной таблицей ascii, а не со всеми символами Юникода.

Затем в Python

     json.loads(base64.b64decode("eyLDqSI6IsOoIn0=")
    prints: {'é': 'è'}
 

Комментарии:

1. btoa на латыни -1 :/ developer.mozilla.org/fr/docs/Web/API/WindowBase64 /…