我正在
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128)
当我将来自我使用SQLAlchemy访问的MySQL数据库的文本传递给此函数时:
re.compile(ur"<([^>]+)>", flags=re.UNICODE).sub(u" ", s)
数据库编码是utf-8,我甚至将编码传递给SQLAlchemy的create_engine函数。
修改 这就是我查询数据库的方式:
doc = session.query(Document).get(doc_id)
s = doc.title
根据建议,我将s.decode('utf-8')传递给sub
。上面的错误消失了,但我对另一个文档得到了不同的错误:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xeb in position 449: invalid continuation byte
数据库表的定义如下:
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;
非常感谢任何帮助
答案 0 :(得分:34)
我已经解决了这个问题。 SQLAlchemy将title
列作为str
而不是Unicode
返回。
我认为将encoding='utf8'
添加为create_engine
的参数可以解决这个问题,但是,正确的方法是将其传递到数据库URI中:mysql://me@myserver/mydatabase?charset=utf8
。
感谢您的所有答案!