Estoy consiguiendoSQLAlchemy y UnicodeDecodeError
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128)
cuando paso de texto procedente de una base de datos MySQL, que yo soy el acceso utilizando SQLAlchemy, a esta función:
re.compile(ur"<([^>]+)>", flags=re.UNICODE).sub(u" ", s)
La codificación de la base de datos es UTF -8 e incluso estoy pasando la codificación a la función create_engine de SQLAlchemy.
Editar: Así es como yo estoy consultando la base de datos:
doc = session.query(Document).get(doc_id)
s = doc.title
Por sugerencia, pasé s.decode ('UTF-8') a sub
. El error anterior desapareció, pero me da un error diferente para un documento diferente:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xeb in position 449: invalid continuation byte
la tabla de base de datos se define así:
CREATE TABLE `articles` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) DEFAULT NULL,
`cdate` datetime DEFAULT NULL,
`link` varchar(255) DEFAULT NULL,
`content` text,
UNIQUE KEY `id` (`id`),
UNIQUE KEY `link_idx` (`link`)
) ENGINE=InnoDB AUTO_INCREMENT=4127834 DEFAULT CHARSET=utf8;
Cualquier ayuda sería muy apreciada
¿Podemos ver un código más? ¿De dónde viene 's'? Would 's.decode ('utf8')' arreglar cosas? –
@MartijnPieters al agregar s.decode ('utf-8') corrige el error para ese documento en particular, pero si trato de obtener un documento diferente de la base de datos obtengo: UnicodeDecodeError: el códec 'utf8' no puede decodificar byte 0xeb posición 449: byte de continuación inválido. Entonces, el mismo error, diferente personaje. – user1491915
No, ese es un error diferente (una decodifica desde ascii, la otra desde utf-8). Eso significa que el segundo documento no es UTF-8 data * en absoluto *. Por eso queremos ver de dónde viene 's'. –