Я работаю против приложения, которое, похоже, хочет вернуться, что я считаю двойным кодированным строкой 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
?
(И да, я сообщил об этом поведении с разработчиками серверной части.)