gpt4 book ai didi

存储pickle'd数据时出现DjangoUnicodeDecodeError

转载 作者:行者123 更新时间:2023-12-04 23:33:01 25 4
gpt4 key购买 nike

我有一个简单的 dict 对象,我试图在通过 pickle 运行后将其存储在数据库中。似乎 Django 不喜欢尝试对这个错误进行编码。我已经检查过 MySQL,在抛出错误之前查询甚至没有到达那里,所以我不相信这是问题所在。我存储的 dict 如下所示:

{
'ordered': [
{ 'value': u'First\xd1ame Last\xd1ame',
'label': u'Full Name' },
{ 'value': u'123-456-7890',
'label': u'Phone Number' },
{ 'value': u'user@nowhere.org',
'label': u'Email Address' } ],
'cleaned_data': {
u'Phone Number': u'123-456-7890',
u'Full Name': u'First\xd1ame Last\xd1ame',
u'Email Address': u'user@nowhere.org' },
'post_data': <QueryDict: {
u'Phone Number': [u'1234567890'],
u'Full Name_1': [u'Last\xd1ame'],
u'Full Name_0': [u'First\xd1ame'],
u'Email Address': [u'user@nowhere.org'] }>,
'user': <User: itis>
}

抛出的错误是:

'utf8' codec can't decode bytes in position 52-53: invalid data.



位置 52-53 是 pickle 数据中 \xd1 (Ñ) 的第一个实例。

到目前为止,我已经围绕 StackOverflow 进行了深入研究,并发现了一些问题,其中对象的数据库编码是错误的。这对我没有帮助,因为还没有 MySQL 查询。这是在数据库之前发生的。在搜索 pickle 数据上的 unicode 错误时,Google 也没有多大帮助。

值得一提的是,如果我不使用 Ñ,这段代码就可以正常工作。

最佳答案

非常感谢@prometheus,我找到了解决方案。基本上你可以使用 base64 来编码 pickle.dumps() 的输出在将其插入数据库之前。然后,您将转过身使用 base64 解码数据库的输出,然后再将其传递给 pickle.loads()。 .

我的代码现在看起来像这样:

## Put the information into the database:
self.raw_data = base64.b64encode(pickle.dumps(data))

## Get the information out of the database:
return pickle.loads(base64.b64decode(self.raw_data))

再次感谢@prometheus。

关于存储pickle'd数据时出现DjangoUnicodeDecodeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2524970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com