【问题标题】:UnicodeDecodeError while executing query or in jsonpickle执行查询或在 jsonpickle 中出现 UnicodeDecodeError
【发布时间】:2014-11-12 16:07:12
【问题描述】:

我将任意查询发布到服务器端,在服务器端执行它并将结果集发送回客户端。一个典型的查询如下所示:

select Наименование from sys_Атрибут where Наименование = 'Район'

如您所见,它包含非拉丁文字。不执行此查询。但是,如果我这样写

select Наименование AS attr from sys_Атрибут where Наименование = 'Район'

然后,没关系。服务器端代码如下所示:

#--coding: utf-8
from __future__ import unicode_literals
...
import pyodbc   # tried both of them
import pypyodbc #

def resultset(request):
    query = request.POST['query']
    query = u'{}'.format(query) 
    cnx = pyodbc.connect("DRIVER=FreeTDS;SERVER=192.168.0.1;PORT=1433;
    DATABASE = mydatabase;UID=sa;PWD=password;TDS_Version=7.0;ClientCharset=UTF8;")
    cursor = cnx.cursor()
    cursor.execute(query.encode('utf-8'))
    columns = [desc[0] for desc in cursor.description] # sometimes error happens at this point
    data = []
    output = []
    for row in cursor:
        data.append(dict(zip(columns, row)))            
    output = '{items:'
    output += jsonpickle.encode(data) # sometimes at that point
    output += '}'   
    return HttpResponse(output)

整个问题在于表字段的名称。我想,为了解决这个问题,我应该以不同的方式对data.append(dict(zip(columns, row))) 进行编码。

【问题讨论】:

    标签: python django pyodbc jsonpickle


    【解决方案1】:

    显而易见,您不应该将原始查询发送到服务器。其次,使用unicode_literals u"" 字符串很奇怪。第三,使用 unicode 字符串然后输出为utf-8 也很奇怪。我建议[阅读编码开始](http://kunststube.net/encoding/.

    为了解决可能出现的实际问题,问题可能出在 pyodbc 库上。您连接到什么数据库,您是否考虑过使用不同的驱动程序?如果数据库支持您尝试执行的查询 (select unicode from table where field = 'value'),那么很可能是驱动程序搞砸了。

    【讨论】:

      猜你喜欢
      • 2014-03-13
      • 1970-01-01
      • 2020-12-01
      • 2014-04-21
      • 1970-01-01
      • 2021-05-11
      • 1970-01-01
      • 2023-03-03
      相关资源
      最近更新 更多