' UTF8'编解码器无法解码字节0xe4 ...:时区中的无效延续字节

时间:2015-10-23 05:58:11

标签: 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

因为:enter image description here

(更大的图片:http://content.screencast.com/users/doniyor/folders/Jing/media/5baf8537-b48f-4194-8b71-384ec880a7b4/2015-10-23_0753.png

我错过了什么?

2 个答案:

答案 0 :(得分:2)

Mitteleuropa是德国的中欧名词。 MitteleuropäischeZeit是中欧时代。

在任何情况下,0xe4确实是一个UTF-8连续字节,因为前面的p0x70,{{1},它在UTF-8字符串的错误位置}})是not a character that can be continued,因为它不是以一位开头的:

0b01110000

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

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

input

因此,我首先要查看生成SELECT something FROM somewhere WHERE some condition AND EXTRACT('month' FROM "djtest_result"."taken_date" AT TIME ZONE 'Mitteleurop\xe4isch Zeit') = 10 ... 变量的任何代码片段,看它是否是罪魁祸首。时区可能来自数据库,也可能来自配置项,或者可能是硬编码的。 不是的是有效的UTF-8编码。

答案 1 :(得分:1)

我必须禁用USE_TZ,然后才有效。