我有一个 SQLite3
db . 我使用 SQLite Browser 和Python来处理这个数据库 . 我有一列 description
,这是tabe上的一个文本列 . 我使用 Sqlite3 Browser 更改了一行中的文本 . 从那时起,我在python脚本中遇到错误 .
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 36: ordinal not in range(128)
我试图捕获这个异常并打印行,我意识到,除了文本,还有对象缓冲区(这只是一个单元格)行中的其他单元格正常:
<read-write buffer ptr 0x047684B0, size 4307 at 0x04768490>
这是唯一具有此对象的单元格,我未修改的单元格是unicode .
如何解决这个问题?有没有办法将缓冲区转换为数据库中的字符串?
编辑:python代码
with engine.connect() as connection:
for row in connection.execute('SELECT * FROM final_table'):
try:
if any(x in ' '.join(unicode(y) for y in row[:2]+row[3:4]+row[5:13]+row[14:]) for x in ('mm445','xxs', '998s54a')):
print row[:2]+row[3:4]+row[5:13]+row[14:]
for x in row:
print type(x)
except:
print 'exc'
print row[:2]+row[3:4]+row[5:13]+row[14:]
1 回答
您可以使用
unicode()
将字节字符串从某些编码转换为Unicode,但除非您指定编码,否则Python会假定它是ASCII .SQLite不使用ASCII而是使用UTF-8,所以你必须告诉Python它: