我有一个MSSQL数据库,现在要将其迁移到SQLite/Django。我使用pymssql连接到数据库,并将文本字段保存到本地SQLite数据库。
但是对于某些字符,它会出现错误。我收到了像这样的投诉:
UnicodeDecodeError: 'ascii' codec can't decode byte 0x97 in position 1916: ordinal not in range(128)
有没有方法可以将字符转换为适当的Unicode版本?或者将它们删除?
'replace': replace malformed data with a suitable replacement marker, such as '?' or '\ufffd'
'ignore': ignore malformed data and continue without further notice
'backslashreplace': replace with backslashed escape sequences (for encoding only)
测试
>>> "abcd\x97".decode("ascii")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0x97 in position 4: ordinal not in range(128)
>>>
>>> "abcd\x97".decode("ascii","ignore")
u'abcd'
当你有一个字节字符串s
时,不要直接将其用作Unicode对象,而应该使用正确的编解码器显式地进行转换,例如:
u = s.decode('latin-1')
在接下来的代码中使用u
而不是s
(可能是写入sqlite的部分)。假设latin-1
是用于创建此字节串的编码 - 我们无法猜测,所以请尽量查明;-)。
一般来说,我建议:不要在应用程序中将任何文本作为编码的字节串处理 - 在输入后立即将其解码为Unicode对象,并在必要时在输出之前将其重新编码为字节串。