Python、Django与pyodbc:无效字符

1 投票
1 回答
965 浏览
提问于 2025-04-16 14:10

我正在使用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,这个字符是一些古怪的控制字符,实际上几乎没有人用过。

撰写回答