diff --git a/encrypted_fields/fields.py b/encrypted_fields/fields.py index 0a5c090..23da404 100644 --- a/encrypted_fields/fields.py +++ b/encrypted_fields/fields.py @@ -154,8 +154,11 @@ def to_python(self, value): try: value = self.crypter().decrypt(value) + value = value.decode('unicode_escape') except keyczar.errors.KeyczarError: pass + except UnicodeEncodeError: + pass return super(EncryptedFieldMixin, self).to_python(value) @@ -164,7 +167,14 @@ def get_prep_value(self, value): if value is None or value == '' or self.decrypt_only: return value - return self.prefix + self.crypter().encrypt(smart_text(value)) + + if isinstance(value, types.StringTypes): + value = value.encode('unicode_escape') + value = value.encode('ascii') + else: + value = str(value) + + return self.prefix + self.crypter().encrypt(value) def get_db_prep_value(self, value, connection, prepared=False): if not prepared: diff --git a/encrypted_fields/tests.py b/encrypted_fields/tests.py index dd92376..e6cf7a7 100644 --- a/encrypted_fields/tests.py +++ b/encrypted_fields/tests.py @@ -124,7 +124,7 @@ def test_char_field_encrypted(self): self.assertEqual(fresh_model.char, plaintext) def test_unicode_encrypted(self): - plaintext = 'Oh hi, test reader! 🐱' + plaintext = u'Oh hi, test reader! 🐱' model = TestModel() model.char = plaintext