我试图将一些代码从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
。
答案 0 :(得分:4)
在python 3中,您还必须使用'b'标志来打开二进制文件:
with open('service_key.p12', 'rb') as f:
private_key = f.read()
如here所述,二进制I / O不会进行字符编码/解码。你得到了UnicodeDecodeError,因为你使用了Text I / O,它尝试将数据解码为UTF-8,但你的数据不是UTF-8。