Jac*_* M. 4 django unicode pickle
我有一个简单的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>
}
Run Code Online (Sandbox Code Playgroud)
引发的错误是:
'utf8'编解码器无法解码位置52-53中的字节:无效数据。
位置52-53是\xd1酸洗数据中(Ñ)的第一个实例。
到目前为止,我已经研究了StackOverflow,发现了一些问题,即对象的数据库编码错误。这对我没有帮助,因为还没有MySQL查询。这是在数据库之前发生的。在搜索腌制数据的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))
Run Code Online (Sandbox Code Playgroud)
再次感谢您@prometheus。