UnicodeEncodeError: кодек ascii не может кодировать символы из-за één из базы данных

У меня есть поле для получения из базы данных, которое содержит строку с этой частью één, и при получении этого я получаю сообщение об ошибке:

"UnicodeEncodeError: кодек ascii не может кодировать символы в позиции 12-15: порядковый номер не в диапазоне (128)"

У меня есть поиск этой ошибки, и у других людей были проблемы из-за юникодов, которые начинаются примерно так u'\xa0 и т. д. Но в моем случае я думаю, что это связано со специальными символами. Я не могу вносить изменения в базу данных, так как она не находится под моим доступом. Я могу просто получить к нему доступ.

Код здесь: (на самом деле это вызов внешнего URL-адреса)

req = urllib2.Request(url)
req.add_header("Content-type", "application/json")
res = urllib2.urlopen(req,timeout = 50)         #50 secs timeout
clientid = res.read()
result = json.loads(clientid)

Затем я использую переменную результата, чтобы получить вышеупомянутую строку, и получаю сообщение об ошибке в этой строке:

updateString +="name='"+str(result['product_name'])+"', "

person Shaibi Rana    schedule 05.06.2014    source источник
comment
я добавил код   -  person Shaibi Rana    schedule 05.06.2014
comment
Покажите код, в котором вы используете переменную результата... и получите ошибку   -  person Janne Karila    schedule 05.06.2014
comment
Где обращение к базе и в какой строке ошибка?   -  person Matthias    schedule 05.06.2014
comment
здесь происходит сбой, когда я пытаюсь объединить его с моим запросом на обновление, т.е. updateString +=name='+str(result['product_name'])+', в этой строке выдается ошибка   -  person Shaibi Rana    schedule 05.06.2014
comment
у меня нет вызова базы данных, я просто вызываю API, он дает мне данные json, и я использую их дальше, но выдает ошибку, как указано в комментарии выше   -  person Shaibi Rana    schedule 05.06.2014
comment
Возможный дубликат Python - кодек ascii не может декодировать байт   -  person kenorb    schedule 28.05.2017


Ответы (2)


Вам нужно найти кодировку, которая используется для ваших данных, прежде чем они будут вставлены в базу данных. Предположим, что это UTF-8, поскольку он наиболее распространен.

В этом случае вы захотите декодировать UTF-8 вместо декодирования ascii. Вы не предоставили никакого кода, поэтому я предполагаю, что у вас есть "data".decode(). Попробуйте "data".decode("utf-8"), и если ваши данные были закодированы с помощью этой кодировки, она будет работать.

person Martin Konecny    schedule 05.06.2014
comment
Я попробовал ваше вышеупомянутое решение, на этот раз оно выдало другую ошибку, т.е. s = obj['product_name'].decode(utf8) File /usr/lib/python2.7/encodings/utf_8.py, строка 16, в возврате декодирования codecs.utf_8_decode (ввод, ошибки, True) UnicodeEncodeError: кодек ascii не может кодировать символы в позиции 12-15: порядковый номер не в диапазоне (128) - person Shaibi Rana; 05.06.2014
comment
Значит, он вылетает на json.loads? Или есть другое место? - person Martin Konecny; 05.06.2014
comment
здесь происходит сбой, когда я пытаюсь объединить его с моим запросом на обновление, т.е. updateString +=name='+str(result['product_name'])+', в этой строке выдается ошибка - person Shaibi Rana; 05.06.2014
comment
Тогда, возможно, ваша кодировка не utf-8. Попробуйте найти, какая кодировка используется. - person Martin Konecny; 05.06.2014
comment
мои извинения, его декодирование Unicode теперь не поддерживается. - person Shaibi Rana; 05.06.2014
comment
Тогда это должна быть другая линия. Мы не расшифровываем Unicode в строке, которую я вам предоставил. - person Martin Konecny; 05.06.2014
comment
Я использовал ваш код, например этот updateString +=name='+unicode(result['product_name'], 'utf8')+', выдает мне эту ошибку: TypeError: декодирование Unicode не поддерживается - person Shaibi Rana; 05.06.2014
comment
Так что мне кажется, что тогда строка уже была юникодной. Поэтому удалите функции str() и unicode в этой строке. - person Martin Konecny; 05.06.2014
comment
Вы действительно спасаете жизнь, спасибо за столько времени. - person Shaibi Rana; 05.06.2014

Так что мне кажется, что тогда строка уже была юникодной. Поэтому удалите функции str() и unicode в этой строке.

person Martin Konecny    schedule 05.06.2014