Кодек ASCII, очевидно, не может декодировать это, потому что это не ASCII.Я думаю, вам придется выяснить кодировку данных и передать юникодную строку в Suds.Например, если кодировка UTF-16, передайте unicode(binarydata, 'utf-16')
в юг.
То, что в первом примере вы считаете беспорядком плохо закодированного мусора, это просто то, что отображается на экране, когда вы позволяете ему отображать двоичныйданные.Символы, отображаемые здесь, зависят от конфигурации набора символов вашей системы.
Ваш второй пример - строковое представление Python некоторых двоичных данных.Строковое представление содержит только печатные символы ASCII.Непечатные или не ascii символы отображаются в шестнадцатеричном формате.Это строковое представление просто показывает байты ваших данных и не говорит вам, хорошо ли закодированы данные в некотором наборе символов.
Я не смог правильно определить кодировку вашего второго примера.Самым близким, что я нашел, был «utf-16-le».Но это все равно вызывает ошибки декодирования в суррогатных парах.
Использование s.decode('utf-16-le', 'replace')
Я получил набор китайских символов:
䘀䬬姘Ḽ뗼㖈ÿ鞽ÿݳ뺔豁鼞籆㐰曹䂾埓ÿ菑忊ᣠ鿀돹诡訨糍缛뇚鰧ÿ嚛ܙ燼㭟㱢붡辟仪〰ꋧᎾ喝嫗⧄뿬쳢㑃ᚄ汉䨏좧퉊쎥钨榒촲謋以⚗퇞즵䧪巎䃀ᒺꕕ蟎᳦罨�鮉ማ᷈⻝撛妷ⲭꬎ鉱왾䲄쉘宄㋂鷲㶡崟ﱈℒꐀ喥䷚쯒걭➗⋬鰧Ⴠ衯�邓椾̰ᕫ녷챣컍팶㉎⇟怩ਐ詂玮괓懔ꜙ㽰�
Интересно то, что Google переводит третий символ, 姘
, до http
.
ОБНОВЛЕНИЕ: Следующая интерактивная сессия Python может прояснить, что я имею в виду в моем комментарии ниже:
>>> s = '\x00F,K\xd8Y'
>>> print(s)
F,K�Y
>>> u = s.decode('utf-16-le')
>>> u
u'\u4600\u4b2c\u59d8'
>>> print(u)
䘀䬬姘
>>>