Pergunta

Quando tento colocar uma string zlibbed em models.textfield

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

Falha:

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

Existe alguma maneira de corrigir isso (além de escapar da corda - ela deve ser eficaz)?

Foi útil?

Solução

Como Marcus diz, você terá que usar o BLOB se quiser mantê -lo em formato binário. Se você está bem em codificá -lo, pode usar a codificação Base64:

from base64 import binascii

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

Nos meus testes muito básicos com caracteres de 33k, a sequência ZLIB era 28% do tamanho da string original, a sequência ZLIB codificada base64 era 37% do tamanho da string original. Não é tão bom na compressão, mas ainda é uma grande melhoria.

Outras dicas

Se você não deseja codificá -lo, precisará armazená -lo como um objeto binário (blob), não uma string. O Django não parece suportar Blobfields para fora da caixa, então encontre -o na rede ou hackear algo juntos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top