Я знаю, что многие люди в Интернете выразили проблемы с строковыми кодировками в Python, но независимо от того, что я пытаюсь, я не могу понять, как исправить мою проблему. По сути, я использую TCP-сокеты для подключения к веб-серверу, а затем отправляю серверу HTTP-запрос. Я прочитал ответ в ряд буферов, которые я декодирую и объединяю, чтобы создать полный ответ в виде строки. Однако, когда я получаю ответ, я получаю UnicodeDecodingErrors. Я хочу использовать свою программу для перехода на многие другие веб-сайты, поэтому есть ли решение этой проблемы, которая будет работать практически с любым сайтом, который я ему даю?Проблемы с декодированием/кодированием Python
Спасибо за ваше время.
Некоторый код:
def getAllFromSocket(socket):
'''Reads all data from a socket and returns a string of it.'''
more_bytes = True
message = ''
if(socket!=None):
while(more_bytes):
buffer = socket.recv(1024)
if len(buffer) == 0:
more_bytes = False
else:
message += buffer.decode('utf-8')
return message
Так что, когда я делаю это:
received_message = getAllFromSocket(my_sock)
я получаю:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xd0 in position 1023: unexpected end of data
Можете ли вы привести пример кода/данных, который иллюстрирует вашу проблему? –
поиск pycon 2012 unicode на youtube. В unicode есть потрясающий видеоролик в python2/3 –
. Вам, скорее всего, нужно проанализировать заголовок 'Content-Type' и соответствующим образом декодировать. Нет «волшебного» решения (за исключением использования библиотеки вместо того, чтобы сворачивать собственный код для проблемы, которая была решена сто тысяч раз). –