【发布时间】:2011-07-06 13:27:35
【问题描述】:
我有一个 Django (1.2.x) 项目,旨在支持德语和英语语言。该项目使用mod_wsgi 托管在 Apache (2.x) 后面的 Linux 机器上。该数据库托管在一个单独的机器上运行在 Windows 上的 SQL Server 2005 上。 easysoft SQL Server ODBC driver 用于将项目与数据库连接起来。
我将使用项目中的一个应用程序中的模型之一作为这个问题的示例。这个有问题的模型包含一个 TextField。此字段在 SQL Server 的表中被转换为 NVARCHAR(MAX) 列类型。数据库的编码设置为“Latin1_General_CI_AS”。 easysoft unixODBC 源配置为使用ConvToUtf = 1,它在将数据从数据库返回到应用程序时,基本上将数据从 UCS-2 编码转换为 UTF-8 编码。 (这里之所以提到UCS-2,是因为我读过,发现SQL server 以UCS-2 编码存储Unicode 数据。)
但是,当通过管理面板查看存储在数据库中的数据时,德语字符会转换为奇怪的符号(这在查看管理面板上的数据时以及在返回数据的 API 中都可见JSON 格式)。
例如以下德语单词:Geschäftsbedingungen。在它被保存到数据库后,它会显示为:Geschäftsbedingungen。
在 Linux 机器上运行的 Python 版本是 Python 2.6。我不确定我应该提供哪些其他信息才能为问题提供更多背景信息。
显然,我已经尝试了几件事,但无济于事。我正在寻找有关如何解决此问题的任何线索。对此的任何帮助将不胜感激。
UPDATE:如果我发现的数据直接保存到数据库中 通过编辑表格 SQL管理软件,数据 在 Django 管理员上都显示正常 页面以及 API。这是 令人费解。数据保存时 通过管理面板,奇怪的 字符出现。
【问题讨论】:
-
stackoverflow.com/questions/947077/… 在我看来 pyodbc + FreeTDS 是更好的解决方案,免费且经常被 Django/Python 开发人员使用。你必须只记得在 freetds.conf 中设置 client charset = UTF-8
-
我忘了提到我在 Django 中使用
pyodbc。我不同意您对FreeTDS是更好的解决方案的看法。FreeTDS受到严格限制。由于FreeTDS面临的诸多限制和问题,我们不得不从easysoft购买商业驱动。
标签: sql-server django unicode encoding utf-8