我试图将一些代码从Python 2移植到3,但当它读取Google API.p12服务密钥时,会抛出UnicodeDecodeError
。
with open('service_key.p12', 'r') as f:
private_key = f.read()
这是错误
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x82 in position 1: invalid start byte
这段代码在python 2.7中运行良好,与python 3.4不同我还安装了pyOpenSSL==0.14
。
在python 3中,打开二进制文件时也必须使用'b'标志:
with open('service_key.p12', 'rb') as f:
private_key = f.read()
如上所述,二进制I/O不会进行字符编码/解码。您会得到UnicodeDecodeError,因为您使用了文本I/O,它试图将数据解码为UTF-8,但您的数据不是有效的UTF-8。