Я смотрел на этот вопрос: python3 заменяет двойную обратную косую черту на одну обратную [двойную]
и просеять ответы на похожие вопросы: Python Replace \ with \ ,
Почему необработанные строковые литералы Python не заканчиваются одним обратным слешем?
, Как мне убрать экранированную строку с юникодом в python?
Когда я понял, что ни один из ответов на самом деле не решил эту проблему.
Скажем, у меня битая строка в Юникоде, она содержит и экранированные обратные слэши и экранирующие символы:
my_str = '\\xa5\\xc0\\xe6aK\xf9\\x80\\xb1\\xc8*\x01\x12$\\xfbp\x1e(4\\xd6{;Z'
Когда я его печатаю, некоторые символы оценивают:
print(my_str)
\xa5\xc0\xe6aKù\x80\xb1\xc8*☺↕$\xfbp▲(4\xd6{;Z
Я могу вручную исправить это так:
my_str = repr(my_str)
my_str
"'\\\\xa5\\\\xc0\\\\xe6aKù\\\\x80\\\\xb1\\\\xc8*\\x01\\x12$\\\\xfbp\\x1e(4\\\\xd6{;Z'"
my_str = my_str.replace('\\\\','\\')
print(my_str)
'\xa5\xc0\xe6aKù\x80\xb1\xc8*\x01\x12$\xfbp\x1e(4\xd6{;Z'
Но на этом этапе мне нужно вручную скопировать и вставить результат печати в переменную, чтобы завершить исправление:
my_str = '\xa5\xc0\xe6aKù\x80\xb1\xc8*\x01\x12$\xfbp\x1e(4\xd6{;Z'
print(my_str)
¥ÀæaKù±È*☺↕$ûp▲(4Ö{;Z
Как мне это сделать без копирования и вставки?