0

У меня есть строка примерно с таким содержанием: b'\\u0417\\u0434\\u0440\\u0430'
Как декодировать ее? Кодировка utf-8.

P.S. это именно строка, а не bytes

  • @ТимурВалиев там просто как из стороки "слово" сделать перевод в тип bytes. Но у меня код utf не в bytes представлены, а в string – Андрей Антипов Dec 15 '16 at 16:55
  • может здесь? Ребята уже здесь с этим сталкивались – TimurVI Dec 15 '16 at 17:01
  • @АндрейАнтипов, это не UTF-8, А UTF-16. Почувствуйте разницу. – 0andriy Dec 15 '16 at 18:38
  • 2
    Какой тип у вашей "строки"? Покажите: print(type(data)) и print(ascii(data)). Откуда данные пришли? (если это часть json, то не нужно руками парсить, используйте json-парсер) – jfs Jan 17 '17 at 09:33
  • @PashaPash: "b'\u0417'" != b'\\u0417'" в Питоне (у автора может во вводе именно \\u и есть, но из вопроса это не ясно). – jfs Apr 27 '17 at 19:45
  • @jfs но дело в том что я только добавил одинарные кавычки. слеши я не допечатывал. удвоение слешей, судя по всему, баг редактора :( –  Apr 27 '17 at 19:50
  • @jfs точнее, не баг - "фича". скорее всего у автора были двойные слеши, и он просто не заметил что их съел парсер, вместе с переносами строк. В любом случае, теперь никто не узнает что там было. Закрою вопрос по причине неизвестности. –  Apr 27 '17 at 19:53
  • @PashaPash: REPL в Питоне удваивает слеши (repr неявно вызывается), поэтому не ясно, что там было (cъедание слешей могло правильно показывать строку -- одна "фича" исправляла другую "фичу"). Без print(ascii(data)) я не могу сказать что на входе. К примеру, len(json.loads('"\\\\"')) == 1. Как json-данные \u0413\u0440... преобразовать в русский текст – jfs Apr 27 '17 at 19:59

1 Answers1

2

Как отметил в комментарии Тимур Валиев, здесь описано решение похожей задачи. В вашем случае надо сделать так:

>>>> string = "b'\\u0417\\u0434\\u0440\\u0430'"
>>>> print(string[2:-1].encode('utf-8').decode('unicode-escape'))
Здра