Unescaping символы в строке с Python

Я сделал JSON-запрос, который дает мне строку, которая использует коды символов Unicode, которые выглядят следующим образом:

s = "\u003Cp\u003E"

И я хочу преобразовать это в:

s = "<p>"

Какой лучший способ сделать это в Python?

Обратите внимание, это тот же вопрос, что и этот, только в Python, за исключением Ruby. Я также использую Posterous API.

3 ответа

Решение

Если данные пришли из JSON, json Модуль уже должен был расшифровать эти экранирования для вас:

>>> import json
>>> json.loads('"\u003Cp\u003E"')
u'<p>'
>>> "\\u003Cp\\u003E".decode('unicode-escape')
u'<p>'

РЕДАКТИРОВАТЬ: первоначальный вопрос « Отмена экранирования символов в строке с помощью Python » не уточнял, должна ли строка быть написана или прочитана (позже были добавлены слова « ответ JSON », чтобы уточнить намерение было читать ).

Поэтому я ответил на противоположный вопрос: как записать сериализованные данные JSON, выгружая их в неэкранированную строку (вместо того, чтобы загружать данные из строки).

Мой вариант использования заключался в создании файла JSON из моего собственного словаря данных, но файл содержал экранированные символы, отличные от ASCII. Итак, я сделал это так:

      with open(filename,'w') as jsonfile:
    jsonstr = json.dumps(myDictionary, ensure_ascii=False)
    print(jsonstr)          # to screen
    jsonfile.write(jsonstr) # to file

Если true (по умолчанию), в выводе гарантированно будут экранированы все входящие символы, отличные от ASCII. Если ensure_asciifalse, эти символы будут выводиться как есть.

Взято отсюда: https://docs.python.org/3/library/json.html

Другие вопросы по тегам