Ned Batchelder сказал:
Это немного опасно в зависимости от того, откуда идет строка, но как насчет:
blockquote>>>> s = '\u003cfoo\u003e' >>> eval('u"'+s.replace('"', r'\"')+'"').encode('ascii') '<foo>'
На самом деле этот метод можно сделать безопасным следующим образом:
>>> s = '\u003cfoo\u003e' >>> s_unescaped = eval('u"""'+s.replace('"', r'\"')+'-"""')[:-1]
Учесть строку тройной кавычки и тире прямо перед закрытием 3-кавычек.
- Использование 3-кавычной строки гарантирует, что если пользователь вводит «\\» (пробелы, добавленные для визуальной ясности) в строку, это не нарушит оценщика;
- Черта в конце отказоустойчивость в случае, если строка пользователя заканчивается символом «\». Прежде чем присваивать результат, мы нарезаем вставленную черту с помощью [: -1]
. Поэтому не нужно беспокоиться о том, что вводит пользователь, если оно будет записано в необработанном формате .