首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >'utf8‘编解码器无法解码字节0xe4...:时区中的延续字节无效

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

Stack Overflow用户
提问于 2015-10-23 13:58:11
回答 2查看 10.4K关注 0票数 0

我在UserProfile模型中这样做:

代码语言:javascript
复制
def repeated_times(self, test, date):
    return self.user.user_test_results.filter(taken_date__month=date.month, djangotest=test).count()

但我得到了

代码语言:javascript
复制
'utf8' codec can't decode byte 0xe4 in position 169: invalid continuation byte

因为这是:

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

我遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-23 14:33:23

我不得不禁用USE_TZ,然后它就起作用了。

票数 1
EN

Stack Overflow用户

发布于 2015-10-23 14:04:38

Mitteleuropa是德语中欧的术语。Mitteleuropäische Zeit是中欧时间。

在任何情况下,0xe4确实是UTF-8继续字节,并且它位于错误的位置,因为前面的p (0x700b01110000)是not a character that can be continued,因为它不是以一位开始的:

代码语言:javascript
复制
Mitteleurop\xe4ische Zeit

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

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

代码语言:javascript
复制
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编码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33295733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档