Out [2]: "u '\ xd0 \ xa0 \ xd0 \ xbe \ xd1 \ x81 \ xd1 \ x81 \ xd0 \ xb8 \ xd0 \ xb9 \ xd1 \ x81 \ xd0 \ xba \ xd0 \ xb0 \ xd1 \" x8f \ xd0 \ xa4 \ xd0 \ xb5 \ xd0 \ xb4 \ xd0 \ xb5 \ xd1 \ x80 \ xd0 \ xb0 \ xd1 \ x86 \ xd0 \ xb8 \ xd1 \ x8f '"
Если это то, что вы видите, ваш терминал настроен неправильно, он обрабатывает вход UTF-8 как ISO-8859-1 (или cp1252 в случае консоли Windows, которую невозможно правильно настроить) .
Правильное представление Python для Российская Федерация
будет литералом Unicode:
u'\u0420\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0430\u044f \u0424\u0435\u0434\u0435\u0440\u0430\u0446\u0438\u044f'
Что довольно близко к строковому литералу JavaScript / JSON
"\u0420\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0430\u044f \u0424\u0435\u0434\u0435\u0440\u0430\u0446\u0438\u044f"
Если вы хотите 7-битно-безопасное (ASCII) представление строки Unicode, JSON является разумным выбором формата. Получите его, используя json.dumps()
, а не взламывая Python repr, поскольку между этими двумя форматами есть некоторые тонкие несоответствия.
Другие хорошо понятные представления ASCII, которые вы можете попробовать, могут включать URL-кодировку (%D0%A0%D0%BE...
) и экранирование символов XML (<value>Рос...</value>
).
Если вам нужно только произвольное двоичное представление, которое не обязательно должно быть 7-битным безопасным, как упоминал Макс, просто .encode('utf-8')
.