App Engine ndb StringProperty and string hashes

2019-08-03 04:19发布

I'm using PyCrypto for generating secure key hashes. I want to store one or more of the partial keys I generate. Each partial key is in the form

\x0f|4\xcc\x02b\xc3\xf8\xb0\xd8\xfc\xd4\x90VE\xf2

I have an ndb StringProperty() in which I'd lke to store that info. However, it raises a BadValueError saying it expects an UTF-8 encoded string. I tried using str's .encode('uft-8') method but that also raises an error telling me it couldn't encode because bad positioning.

Anyway, my question is, how can I convert that byte string into something I can store in ndb?

1条回答
走好不送
2楼-- · 2019-08-03 04:59

Improved Answer:

In this case instead of storing the key as String or Text, you should use a BlobProperty which stores an uninterpreted byte string.

Original Answer:

To convert bytes (strings) to unicode you use the method decode. You also need to use an encoding that preserves the original binary data, which is ISO-8859-1. See ISO-8859-1 encoding and binary data preservation

unicode_key = key.decode('iso-8859-1')
bytes_key = unicode_key.encode('iso-8859-1')

Consider also using A TextProperty instead, as StringProperties are indexed.

查看更多
登录 后发表回答