Estoy en un escenario donde llamo api y en función de los resultados de la API llamo a la base de datos para cada registro que tengo en la API. Mis cadenas de retorno de llamada de API y cuando hago la llamada a la base de datos para los elementos devueltos por API, para algunos elementos obtengo el siguiente error.Python: UnicodeEncodeError: el códec 'latin-1' no puede codificar el carácter
Traceback (most recent call last):
File "TopLevelCategories.py", line 267, in <module>
cursor.execute(categoryQuery, {'title': startCategory});
File "/opt/ts/python/2.7/lib/python2.7/site-packages/MySQLdb/cursors.py", line 158, in execute
query = query % db.literal(args)
File "/opt/ts/python/2.7/lib/python2.7/site-packages/MySQLdb/connections.py", line 265, in literal
return self.escape(o, self.encoders)
File "/opt/ts/python/2.7/lib/python2.7/site-packages/MySQLdb/connections.py", line 203, in unicode_literal
return db.literal(u.encode(unicode_literal.charset))
UnicodeEncodeError: 'latin-1' codec can't encode character u'\u2013' in position 3: ordinal not in range(256)
El segmento de mi código del error anterior se refiere es:
...
for startCategory in value[0]:
categoryResults = []
try:
categoryRow = ""
baseCategoryTree[startCategory] = []
#print categoryQuery % {'title': startCategory};
cursor.execute(categoryQuery, {'title': startCategory}) #unicode issue
done = False
cont...
Después de hacer algunas búsqueda de google He intentado lo siguiente en mi línea de comandos para entender lo que pasa ...
>>> import sys
>>> u'\u2013'.encode('iso-8859-1')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'latin-1' codec can't encode character u'\u2013' in position 0: ordinal not in range(256)
>>> u'\u2013'.encode('cp1252')
'\x96'
>>> '\u2013'.encode('cp1252')
'\\u2013'
>>> u'\u2013'.encode('cp1252')
'\x96'
Pero no estoy seguro de cuál sería la solución para solucionar este problema. Además, no sé cuál es la teoría detrás de encode('cp1252')
sería genial si puedo obtener alguna explicación sobre lo que probé anteriormente.
duplicado posible de [UnicodeEncodeError : el códec 'latin-1' no puede codificar el carácter] (http://stackoverflow.com/questions/3942888/unicodeencodeerror-latin-1-codec-cant-encode-character) –