Задать вопрос
@kr_ilya

Как декодировать строку из переменной?

Есть код
eng = 'utf-8'
print(b'"message":"\xd0\x9f\xd0\xbb\xd0\xb0\xd1\x82\xd0\xb5\xd0\xb6 \xd0\xbd\xd0\xb5\xd0\xb2\xd0\xbe\xd0\xb7\xd0\xbc\xd0\xbe\xd0\xb6\xd0\xb5\xd0\xbd"'.decode(eng))


он отрабатывает правильно и выводит "message":"Платеж невозможен"

Но как сделать так, чтобы декодирование применялось к строке из переменной?
Я пробовал так
eng = 'utf-8'
s = bytes('"message":"\xd0\x9f\xd0\xbb\xd0\xb0\xd1\x82\xd0\xb5\xd0\xb6 \xd0\xbd\xd0\xb5\xd0\xb2\xd0\xbe\xd0\xb7\xd0\xbc\xd0\xbe\xd0\xb6\xd0\xb5\xd0\xbd"', encoding=eng)
print(s.decode(eng))

На выходе "message":"Ð�лаÑ�еж невозможен"
  • Вопрос задан
  • 638 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@kr_ilya Автор вопроса
eng = 'utf-8'
s = '"message":"\xd0\x9f\xd0\xbb\xd0\xb0\xd1\x82\xd0\xb5\xd0\xb6 \xd0\xbd\xd0\xb5\xd0\xb2\xd0\xbe\xd0\xb7\xd0\xbc\xd0\xbe\xd0\xb6\xd0\xb5\xd0\xbd"'
incoming_data = bytes([ord(char) for char in s])
print(incoming_data.decode(eng))
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
AlexNest
@AlexNest Куратор тега Python
Работаю с Python/Django
Так а зачем во втором случае вы пытаетесь повторно преобразовать строку в байты, если она уже байтовая?
Ответ написан
Комментировать
Vindicar
@Vindicar
RTFM!
encoding=eng лишнее. У тебя код закодировал строку в utf-8 при создании объекта bytes(), так что она оказалась уже дважды закодирована.

Но так как этот параметр обязателен, то можно схитрить.
strange_string = '"message":"\xd0\x9f\xd0\xbb\xd0\xb0\xd1\x82\xd0\xb5\xd0\xb6 \xd0\xbd\xd0\xb5\xd0\xb2\xd0\xbe\xd0\xb7\xd0\xbc\xd0\xbe\xd0\xb6\xd0\xb5\xd0\xbd"'
bstring = bytes(ord(c) for c in strange_string)  # конструируем строку байт побайтово, из кодов символов в строке
result = bstring.decode('utf-8')
print(result)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы