存储泡菜数据时出现DjangoUnicodeDecodeError

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并没有太大帮助。

可能值得一提的是,如果我不使用Ñ,则此代码可以正常工作。

Jac*_* M. 5

非常感谢@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。