質問

私はmodels.TextFieldでzlibbed文字列を入れしようとすると、

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

この問題を解決するためにどのような方法がある(文字列をエスケープから離れて - それは、スペースefficentである必要があります)。

役に立ちましたか?

解決

マーカス氏と同じように、

、あなたはバイナリ形式でそれを維持したい場合はBLOBを使用する必要があります。あなたはそれをコードしてOKなら、あなたは、base64エンコードを使用することができます:

from base64 import binascii

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

を33K文字と私の非常に基本的なテストでは、zlibの文字列は、28%が元の文字列の大きさだった、zlibの文字列base64エンコードは、37%は元の文字列の大きさでした。圧縮にはかなり良くないが、それでも大きな改善ます。

他のヒント

あなたはそれをエンコードしたくない場合は、

は、バイナリオブジェクト(BLOB)、ではない、それを文字列として保存する必要があります。 Djangoは一緒に何かを箱から出してBlobFieldsをサポートしているので、ネット上でそれを探しに行くか、ハックしていないようです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top