У меня есть словарь, содержащий строки с символами Unicode:
d = {'middle': "middle is:\U0001f004."}
В целях отладки я хотел бы распечатать d и получить вывод с той же нотацией:
print(d)
{'middle': "middle is:\U0001f004."}
Как мне это сделать?






При выводе строки закодируйте ее с помощью unicode_escape, например: string.encode('unicode_escape').
Правильно, вы можете вызвать это только по строке. Вы можете использовать понимание dict, чтобы вызвать его для каждой пары ключ-значение в dict: {k: v.encode('unicode_escape') for k, v in d.items()}.
тогда это не сработает для списка. Или диктат. Мне нужно что-то более общее. Отладка вещей со строками Unicode в.
... тогда я получаю b"{'middle': 'middle is:\\U0001f004.'}". Я просил {'middle': 'middle is:\U0001f004.'}. Еще предстоит пройти ... Все, что мне нужно, это простой способ отладить и распечатать некоторые переменные в моем коде.
Наконец-то мы знаем, что вы используете Python3!
Вы можете закодировать строковое представление словаря и закодировать его с помощью unicode_escape. Это вернет объект bytes, который вы захотите снова декодировать, чтобы получить строку.
d = {'middle': 'middle is:\U0001f004.'}
print(str(d).encode('unicode_escape').decode())
Выходы:
{'middle': 'middle is:\U0001f004.'}
Это должно работать в широком диапазоне ситуаций, но, вообще говоря, убедиться, что напечатанная строка соответствует коду, используемому для создания какой-либо структуры данных, невозможно.
Для этой цели в Python 3 есть функция ascii. Любой символ за пределами набора символов ASCII отображается как escape-код:
>>> d = {'middle': "middle is:\U0001f004."}
>>> d
{'middle': 'middle is:?.'}
>>> print(ascii(d))
{'middle': 'middle is:\U0001f004.'}
Это простое и точное решение.
Мне нравится, как на этот вопрос ответил пользователь, у которого есть золотая партия как в Python, так и в Unicode, и у которого есть изображение профиля, то есть его собственное имя, закодированное в ASCII :-D
@XPlatformer, вы первый, кто прокомментирует мою фотографию в профиле. ?
d- это надиктовка. У дикта нет методаencode.