2009-05-17 33 views
1

当我尝试将zlibbed字符串models.TextField的Zlib数据库 - Django的

>>> f = VCFile(head = 'blahblah'.encode('zlib')) 
>>> f.save() 

失败:

... 
raise DjangoUnicodeDecodeError(s, *e.args) 
DjangoUnicodeDecodeError: 'utf8' codec can't decode byte 0x9c in position 1: unexpected code byte. You passed in 'x\x9cK\xcaI\xccH\x02b\x00\x0eP\x03/' (<type 'str'>) 

有什么办法来逃逸字符串解决这个问题(除 - 它必须是节省空间的)?

回答

1

就像Marcus说的,如果你想保持二进制格式,你必须使用BLOB。如果你确定了编码,你可以使用base64编码:

from base64 import binascii 

f = VCFile(head = binascii.b2a_base64('blahblah'.encode('zlib'))) 

在我非常基本的测试与33K字,zlib的字符串为28%的原始字符串的大小,base64编码字符串的zlib是原始字符串大小的37%。压缩效果不太好,但仍有很大改进。

0

如果您不想对其进行编码,则必须将其存储为二进制对象(BLOB),而不是字符串。 Django似乎并不支持开箱即用的BlobFields,因此请在网上找到它或者共同开发一些东西。