Я работаю против приложения, которое, похоже, хочет вернуться, что я считаю двойным кодированным строкой UTF-8.
Я отправляю строку u'XüYß', закодированную с использованием UTF-8, становясь X\u00fcY\u00df (равным X\xc3\xbcY\xc3\x9f).
Сервер должен просто повторить то, что я ему отправил, но возвращает следующее: X\xc3\x83\xc2\xbcY\xc3\x83\xc2\x9f (должно быть X\xc3\xbcY\xc3\x9f). Если я декодирую его с помощью str.decode('utf-8') становится u'X\xc3\xbcY\xc3\x9f', который выглядит как... unicode-строка, содержащая исходную строку, кодированную с использованием UTF-8.
Но Python не позволит мне декодировать строку unicode, не перекодируя ее сначала - что по какой-то причине не срабатывает, что ускользает от меня:
>>> ret = 'X\xc3\x83\xc2\xbcY\xc3\x83\xc2\x9f'.decode('utf-8')
>>> ret
u'X\xc3\xbcY\xc3\x9f'
>>> ret.decode('utf-8')
# Throws UnicodeEncodeError: 'ascii' codec can't encode ...
Как убедить Python повторно декодировать строку? - и/или есть (практический) способ отладки, что на самом деле в строках, без его передачи, хотя используется все неявное преобразование print?
(И да, я сообщил об этом поведении с разработчиками серверной части.)