我需要在Python中保存一个参数文件,此参数文件包含一些参数,我不想以明文形式留下它们,因此我将整个文件编码为base64(我知道这不是世界上最安全的编码方式,但它适用于我需要使用的数据类型)。
使用编码时,一切都很顺利。我对文件的内容进行编码(一个简单的带有适当扩展名的文本文件),并保存该文件。问题出现在解码时。我打印了保存文件之前已编码的文本和保存后的编码文本,它们完全相同,但由于某种原因,保存文件的文本解码会返回以下错误
有什么解决方法吗?
这是我的代码,我尝试了将所有内容转换为字节、字符串和其他方法...
使用编码时,一切都很顺利。我对文件的内容进行编码(一个简单的带有适当扩展名的文本文件),并保存该文件。问题出现在解码时。我打印了保存文件之前已编码的文本和保存后的编码文本,它们完全相同,但由于某种原因,保存文件的文本解码会返回以下错误
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8d in position 1: invalid start byte
,而保存之前的文本解码则很好地工作。有什么解决方法吗?
这是我的代码,我尝试了将所有内容转换为字节、字符串和其他方法...
params = open('params.bpr','r').read()
paramsencoded = base64.b64encode(bytes(params,'utf-8'))
print(paramsencoded)
paramsdecoded = str(base64.b64decode(str(paramsencoded,'utf-8')),'utf-8')
newparams = open('paramsencoded.bpr','w+',encoding='utf-8')
newparams.write(str(paramsencoded))
newparams.close()
params2 = open('paramsencoded.bpr',encoding='utf-8').read()
print(params2)
paramsdecoded = str(base64.b64decode(str(paramsencoded,'utf-8')),'utf-8')
paramsdecoded = base64.b64decode(str(params2))
print(str(paramsdecoded,'utf-8'))
paramsencoded
字节值解码为字符串。b64decode()
也接受字节作为参数。 - Martijn Pietersparamsencoded.bpr
文件?您只需要写入,而不需要读取,因此可以去掉+
。同样的备注:以二进制模式打开并直接将bytes
值写入,而无需先解码为str
。 - Martijn Pietersopen('paramsencoded.bpr',encoding='utf-8').read()
调用中读取文本时,无需使用str(params2)
。UnicodeDecodeError
在哪一行抛出的? - Martijn Pieters