我要创建并保存以下密码:
def create_credential(self):
des = DES.new(CIPHER_N, DES.MODE_ECB)
text = str(uuid.uuid4()).replace('-','')[:16]
cipher_text = des.encrypt(text)
return cipher_text
def decrypt_credential(self, text):
des = DES.new(CIPHER_N, DES.MODE_ECB)
return des.decrypt(text)
def update_access_credentials(self):
self.access_key = self.create_credential()
print repr(self.access_key) # "\xf9\xad\xfbO\xc1lJ'\xb3\xda\x7f\x84\x10\xbbv&"
self.access_password = self.create_credential()
self.save()
我会打电话给:
^{pr2}$这是我得到的stacktrace:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xf5 in position 738: invalid start byte
为什么会发生这种情况?我该如何避开它?在
发生这种情况是因为您试图在文本字段中保存非文本数据。或者使用非文本字段,或者通过例如Base-64编码将数据编码为文本。在
您正在将bytestring存储到Unicode数据库字段中,因此它将尝试解码为Unicode。在
要么使用可以存储不透明二进制数据的数据库字段,要么显式解码为Unicode(拉丁语-1将字节一对一映射到Unicode码位),要么将数据包装成可以存储为文本的表示形式。在
例如,对于django1.6及更高版本,使用^{} 。对于早期版本,使用二进制到文本的转换(例如Base64)比解码拉丁语-1更好;后者的结果不会给您有意义的文本数据,但Django可能会尝试这样显示(例如在管理界面中)。在
此处使用
base64
编码和解码修复了此问题:相关问题 更多 >
编程相关推荐