【问题标题】:Python, Django and pyodbc: invalid charactersPython、Django 和 pyodbc:无效字符
【发布时间】:2011-03-22 05:42:55
【问题描述】:

我正在使用 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 编码,我使用带有 django 的 postgres,它需要 UTF8。

我对使用 pyodbc 很陌生,无法解决这个问题。我试图过滤成堆的谷歌搜索,但没有运气。一些帮助将不胜感激。

编辑

Postgres 数据库是项目的主数据库。我希望能够从 SQL Server 中提取数据。不过这个过程不会经常进行...

发生错误的点来自于从 SQL Server db 读取

【问题讨论】:

  • 您尝试更改client_encoding吗?
  • 详细说明您如何一起使用这两个数据库可能会有所帮助。
  • 你是在运行 django-pyodbc 还是只运行 pyodbc?回溯也会有所帮助。
  • 我只是在运行 pyodbc... 这个过程将是一次性的,并且认为不值得为一个进程安装另一个应用程序 jsut
  • 如果您想要一个明智的答案,而不仅仅是猜测,请显示完整的回溯和错误消息,并回答上一个有关如何一起使用 SQL Server 和 postgres 的问题。发生了什么:阅读 SQL Server?写postgres?还有什么??

标签: python django utf-8 decode pyodbc


【解决方案1】:

你几乎没有给出任何线索,但一个合理的猜测是:

您需要使用正确编码将您的 MS SQL Server 数据解码为 un​​icode,并(不一定立即)将其编码为“UTF-8”以传输到 postgres。

是什么让您认为 SQL Server db 上使用的编码是 latin1 而不是 cp125x?真正的latin1 在 MS 产品上是极不可能的。你的错误字节'\x93' 当解码为cp1252 (通常的嫌疑人)时给出 U+201C 左双引号,通常用于例如MS Word 和常见的粘贴到数据中,最终在数据库中。解码为latin1 会产生U+0093,这是一个神秘的控制字符,在实践中的使用与母鸡的牙齿一样罕见。

【讨论】:

  • 感谢您的回答。我在 SQL Server 数据库上运行 SELECT SERVERPROPERTY('Collat​​ion') 并返回 Latin1_General_CI_AS
  • "collat​​ion" 表示排序顺序。例如,您的数据库可能包含以cp1252(支持多种西欧语言)编码的数据以及名称以“Latin1”开头的几种排序规则中的任何一种......参见例如msdn.microsoft.com/en-us/library/ms143508.aspx
猜你喜欢
  • 2021-12-16
  • 1970-01-01
  • 2017-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多