Python、Django与pyodbc:无效字符
我正在使用pyodbc连接到一个MS SQL服务器数据库。现在遇到的错误是:
invalid byte sequence for encoding "UTF8": 0x93
HINT: This error can also happen if the byte sequence does not match the
encoding expected by the server, which is controlled by "client_encoding".
这个SQL数据库是用Latin1编码的,而我使用的是Postgres和Django,它们期待的是UTF8编码。
我对pyodbc还很陌生,解决这个问题有点困难。我尝试在网上搜索了很多信息,但都没有找到解决办法。如果有人能帮帮我,我会非常感激。
编辑
Postgres数据库是这个项目的主要数据库。我想从SQL服务器中提取数据。不过这个过程不会经常进行……
错误发生的地方是在从SQL服务器数据库读取数据时。
1 个回答
3
你给出的线索几乎没有,但可以合理猜测:
你需要用正确的编码把你的 MS SQL Server 数据解码成 Unicode,然后(不一定要马上)把它编码成 'UTF-8',这样才能传输到 Postgres。
你为什么觉得 SQL Server 数据库使用的编码是 latin1
而不是 cp125x
呢?在微软的产品中,真正的 latin1
是非常不常见的。当你把错误的字节 '\x93'
用 cp1252
解码时,会得到 U+201C 左双引号,这个符号通常在比如 MS Word 中使用,也常常出现在粘贴到数据库中的数据里。而如果用 latin1
解码,就会得到 U+0093,这个字符是一些古怪的控制字符,实际上几乎没有人用过。