2012-04-03 2 views
1

Я знаю, что многие люди в Интернете выразили проблемы с строковыми кодировками в 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 
+2

Можете ли вы привести пример кода/данных, который иллюстрирует вашу проблему? –

+1

поиск pycon 2012 unicode на youtube. В unicode есть потрясающий видеоролик в python2/3 –

+1

. Вам, скорее всего, нужно проанализировать заголовок 'Content-Type' и соответствующим образом декодировать. Нет «волшебного» решения (за исключением использования библиотеки вместо того, чтобы сворачивать собственный код для проблемы, которая была решена сто тысяч раз). –

ответ

1

Вы можете попытаться найти кодирование данных с использованием UnicodeDammit. Убедитесь, что вы получаете utf-8. Вы также можете попросить игнорировать ошибки:

buffer.decode("utf-8", "ignore") 
+1

Данные, похоже, не UTF-8, так что это плохое обходное решение в лучшем случае. –