UnicodeEncodeError:O codec 'ascii' não pode codificar caracteres devido a één do banco de dados
-
21-12-2019 - |
Pergunta
Eu tenho um campo para obter do banco de dados que contém uma string com esta parte e ao obter isso recebo um erro:
"UnicodeEncodeError:O codec 'ascii' não pode codificar caracteres nas posições 12-15:ordinal fora do intervalo(128)"
Eu pesquisei esse erro e outras pessoas estavam tendo problemas devido a unicodes que iniciam algo assim u'\xa0
, etc.Mas no meu caso, acho que é devido a caracteres especiais.Não consigo fazer alterações no banco de dados pois não está sob meu acesso.Eu posso simplesmente acessá-lo.
O código está aqui:(na verdade, é uma chamada para url externo)
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)
Então eu uso a variável de resultado para obter a string mencionada acima e recebo um erro nesta linha:
updateString +="name='"+str(result['product_name'])+"', "
Solução
Você precisa encontrar a codificação usada para seus dados antes de inseri-los no banco de dados.Vamos supor que seja UTF-8, já que é o mais comum.
Nesse caso, você desejará decodificar UTF-8 em vez de decodificar ASCII.Você não forneceu nenhum código, então presumo que tenha "data".decode()
.Tentar "data".decode("utf-8")
, e se seus dados foram codificados usando essa codificação, funcionará.
Outras dicas
Parece-me que a string já era Unicode.Então remova str()
e unicode
funções nessa linha.