1

当我尝试将 zlibbed 字符串放入 models.TextField

>>> 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'>)

有没有办法解决这个问题(除了转义字符串 - 它必须是节省空间的)?

4

2 回答 2

2

就像 Marcus 所说,如果你想保持二进制格式,就必须使用 BLOB。如果您可以对其进行编码,则可以使用 base64 编码:

from base64 import binascii

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

在我对 33k 个字符的非常基本的测试中,zlib 字符串是原始字符串大小的 28%,base64 编码的 zlib 字符串是原始字符串大小的 37%。在压缩方面不太好,但仍然有很大的改进。

于 2009-05-18T16:59:28.347 回答
0

如果您不想对其进行编码,则必须将其存储为二进制对象 (BLOB),而不是字符串。Django 似乎不支持开箱即用的 BlobFields,所以去网上找到它或一起破解一些东西。

于 2009-05-17T18:24:58.183 回答