Python ';utf8';编解码器可以';t解码字节0xe4…:时区中的连续字节无效

Python ';utf8';编解码器可以';t解码字节0xe4…:时区中的连续字节无效,python,django,Python,Django,我在UserProfile模型中执行以下操作: def repeated_times(self, test, date): return self.user.user_test_results.filter(taken_date__month=date.month, djangotest=test).count() 但是我越来越 'utf8' codec can't decode byte 0xe4 in position 169: invalid continuation byte

我在UserProfile模型中执行以下操作:

def repeated_times(self, test, date):
    return self.user.user_test_results.filter(taken_date__month=date.month, djangotest=test).count()
但是我越来越

'utf8' codec can't decode byte 0xe4 in position 169: invalid continuation byte
因为:

(大图:)


我遗漏了什么?

Mitteleuropa是德语中对中欧的称呼。Mitteleuropäische Zeit是中欧时间

在任何情况下,
0xe4
确实是一个UTF-8连续字节,它位于UTF-8字符串的错误位置,因为前面的
p
0x70
0b01110000
)不是以一位开头的:

Mitteleurop\xe4ische Zeit
所以我认为你的文本实际上没有被编码成UTF-8。事实上,代码点
0xe4
在原始IBM PC代码页437中显示为
ä
字符

现在我不确定这是否是一个数据库问题(至少对于您正在查询的特定表)。实际问题似乎出现在存储查询的
输入
变量中:

SELECT    something
    FROM  somewhere
    WHERE some condition
    AND   EXTRACT('month' FROM "djtest_result"."taken_date"
            AT TIME ZONE 'Mitteleurop\xe4isch Zeit') = 10
    ...

因此,我将首先查看生成
input
变量的任何一段代码,看看它是否是罪魁祸首。时区可能来自数据库、配置项,也可能是硬编码的。它不是有效的UTF-8编码。

Mitteleuropa是德语中对中欧的称呼。Mitteleuropäische Zeit是中欧时间

在任何情况下,
0xe4
确实是一个UTF-8连续字节,它位于UTF-8字符串的错误位置,因为前面的
p
0x70
0b01110000
)不是以一位开头的:

Mitteleurop\xe4ische Zeit
所以我认为你的文本实际上没有被编码成UTF-8。事实上,代码点
0xe4
在原始IBM PC代码页437中显示为
ä
字符

现在我不确定这是否是一个数据库问题(至少对于您正在查询的特定表)。实际问题似乎出现在存储查询的
输入
变量中:

SELECT    something
    FROM  somewhere
    WHERE some condition
    AND   EXTRACT('month' FROM "djtest_result"."taken_date"
            AT TIME ZONE 'Mitteleurop\xe4isch Zeit') = 10
    ...

因此,我将首先查看生成
input
变量的任何一段代码,看看它是否是罪魁祸首。时区可能来自数据库、配置项,也可能是硬编码的。它不是有效的UTF-8编码。

Mitteleuropa是德语中对中欧的称呼。Mitteleuropäische Zeit是中欧时间

在任何情况下,
0xe4
确实是一个UTF-8连续字节,它位于UTF-8字符串的错误位置,因为前面的
p
0x70
0b01110000
)不是以一位开头的:

Mitteleurop\xe4ische Zeit
所以我认为你的文本实际上没有被编码成UTF-8。事实上,代码点
0xe4
在原始IBM PC代码页437中显示为
ä
字符

现在我不确定这是否是一个数据库问题(至少对于您正在查询的特定表)。实际问题似乎出现在存储查询的
输入
变量中:

SELECT    something
    FROM  somewhere
    WHERE some condition
    AND   EXTRACT('month' FROM "djtest_result"."taken_date"
            AT TIME ZONE 'Mitteleurop\xe4isch Zeit') = 10
    ...

因此,我将首先查看生成
input
变量的任何一段代码,看看它是否是罪魁祸首。时区可能来自数据库、配置项,也可能是硬编码的。它不是有效的UTF-8编码。

Mitteleuropa是德语中对中欧的称呼。Mitteleuropäische Zeit是中欧时间

在任何情况下,
0xe4
确实是一个UTF-8连续字节,它位于UTF-8字符串的错误位置,因为前面的
p
0x70
0b01110000
)不是以一位开头的:

Mitteleurop\xe4ische Zeit
所以我认为你的文本实际上没有被编码成UTF-8。事实上,代码点
0xe4
在原始IBM PC代码页437中显示为
ä
字符

现在我不确定这是否是一个数据库问题(至少对于您正在查询的特定表)。实际问题似乎出现在存储查询的
输入
变量中:

SELECT    something
    FROM  somewhere
    WHERE some condition
    AND   EXTRACT('month' FROM "djtest_result"."taken_date"
            AT TIME ZONE 'Mitteleurop\xe4isch Zeit') = 10
    ...


因此,我将首先查看生成
input
变量的任何一段代码,看看它是否是罪魁祸首。时区可能来自数据库、配置项,也可能是硬编码的。它不是有效的UTF-8编码。

我不得不禁用
USE\u TZ
,然后它就工作了

我不得不禁用
使用
,然后它就工作了

我不得不禁用
使用
,然后它就工作了

我不得不禁用
使用
,然后它就工作了

我不想禁用使用\u TZI不想禁用使用\u TZI不想禁用使用\u TZI不想禁用使用\u TZso
djtest\u结果。take\u date
不在utf-8中?@doniyor,这是我(相对受过教育的)的猜测。但是datetime字段怎么可能不在utf8中,db本身在utf8中:有什么想法吗?@doniyor,抱歉,误解了。不是数据库内容编码不好,而是
提取。。。在时区
子句中。不知道时区是从哪里来的。我将更新答案以澄清。@Jasper,网络上有大量的文本似乎是用umlaut显示的(没有也一样多),但我现在要听你的。我已经给慕尼黑的一些朋友发了一封快速的电子邮件确认:-)那么
djtest\u结果。take\u date
不在utf-8中吗?@doniyor,这是我(相对受过教育的)猜测。但是datetime字段怎么可能不在utf8中呢,db本身在utf8中:有什么想法吗?@doniyor,对不起,误解了。不是数据库内容编码不好,而是
提取。。。在时区
子句中。不知道时区是从哪里来的。我将更新答案以澄清。@Jasper,网络上有大量的文本似乎是用umlaut显示的(没有也一样多),但我现在要听你的。我已经给慕尼黑的一些朋友发了一封快速的电子邮件以确认:-)那么,
djtest\u结果。take\u date
不在utf-8中吗?@doniyor,那将是我的(相对受教育的)