我越來越SQLAlchemy的和的UnicodeDecodeError
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128)
當我通過文字從一個MySQL數據庫,我使用的SQLAlchemy訪問的到來,給這個函數:
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;
任何幫助,將不勝感激
我們可以看到更多的代碼嗎? 's'從哪裏來? 's.decode('utf8')'會修復一些事情嗎? – 2012-08-15 15:35:05
@MartijnPieters添加s.decode('utf-8')修復了該特定文檔的錯誤,但是如果我嘗試從數據庫中獲取不同的文檔,則會得到:UnicodeDecodeError:'utf8'編解碼器無法解碼字節0xeb位置449:無效的連續字節。所以,同樣的錯誤,不同的性格。 – user1491915 2012-08-15 15:41:33
不,這是一個不同的錯誤(一個解碼來自ascii,另一個來自utf-8)。這意味着第二個文檔根本不是UTF-8數據*。這就是爲什麼我們想看看's'從哪裏來的原因。 – 2012-08-15 15:42:31