¿Por qué obtengo un error UnicodeDecode en la encoding JSON de Python?

Estoy usando Solr 3.3 para indexar cosas de mi base de datos. Compongo el contenido JSON en Python. Logro subir 2126 registros que sumn 523246 caracteres (aproximadamente 511kb) . Pero cuando bash 2027 registros, Python me da el error:

Traceback (most recent call last): File "", line 1, in  File "D:\Technovia\db_indexer\solr_update.py", line 69, in upload_service_details request_string.append(param_list) File "C:\Python27\lib\json\__init__.py", line 238, in dumps **kw).encode(obj) File "C:\Python27\lib\json\encoder.py", line 203, in encode chunks = list(chunks) File "C:\Python27\lib\json\encoder.py", line 425, in _iterencode for chunk in _iterencode_list(o, _current_indent_level): File "C:\Python27\lib\json\encoder.py", line 326, in _iterencode_list for chunk in chunks: File "C:\Python27\lib\json\encoder.py", line 384, in _iterencode_dict yield _encoder(value) UnicodeDecodeError: 'utf8' codec can't decode byte 0x96 in position 68: invalid start byte 

Ay. ¿Es 512kb de bytes un límite fundamental? ¿Hay alguna alternativa de alto volumen al módulo JSON existente?


Actualización : es un error de algunos datos, ya que intentar codificar * biz_list [2126:] * provoca un error inmediato. Aquí está la pieza ofensiva:

‘2nd Floor, Gurumadhavendra Towers, \ nKadavanthra Road, Kaloor, \ nCochin \ x96 682 017′

¿Cómo puedo configurarlo para que pueda codificarse en JSON?


Actualización 2 : La respuesta funcionó como se esperaba: los datos provienen de una tabla MySQL codificada en “latin-1-swedish-ci”. Vi importancia en un número aleatorio. Perdón por canalizar espontáneamente el espíritu de un escritor de titulares al diagnosticar la falla.

Simple, simplemente no use la encoding utf-8 si sus datos no están en utf-8

 >>> json.loads('["\x96"]') .... UnicodeDecodeError: 'utf8' codec can't decode byte 0x96 in position 0: invalid start byte >>> json.loads('["\x96"]', encoding="latin-1") [u'\x96'] 

json.loads

Si s es una instancia de str y está codificada con una encoding basada en ASCII distinta de utf-8 (por ejemplo, latin-1), se debe especificar un nombre de encoding apropiado. Las codificaciones que no están basadas en ASCII (como UCS-2) no están permitidas y deben decodificarse primero a unicode .

Edición : Para obtener el valor Unicode adecuado de “\ x96”, use “cp1252” como mencionó Eli Collins

 >>> json.loads('["\x96"]', encoding="cp1252") [u'\u2013']