您好,我正在尝试将Google服务帐户JSON密钥(包含在文件foo.json-更多上下文here中名为privateKeyData的base64编码字段中)转换为实际的JSON文件(我需要该格式为ansible只接受)
使用此Google python API method
获取foo.json文件。this线程也描述了我正在尝试做的事情(尽管我使用的是python),但该线程对我不起作用(在OSx和Linux上试用过)。
#!/usr/bin/env python3
import json
import base64
with open('/tmp/foo.json', 'r') as f:
ymldict = json.load(f)
b64encodedCreds = ymldict['privateKeyData']
b64decodedBytes = base64.b64decode(b64encodedCreds,validate=True)
outputStr = b64decodedBytes
print(outputStr)
#issue
outputStr = b64decodedBytes.decode('UTF-8')
print(outputStr)
收益
./test.py
b'0\x82\t\xab\x02\x01\x030\x82\td\x06\t*\x86H\x86\xf7\r\x01\x07\x01\xa0\x82\tU\x04\x82\tQ0\x82\tM0\x82\x05q\x06\t*\x86H\x86\xf7\r\x01\x07\x01\xa0\x82\x05b\x04\x82\x05^0\x82\x05Z0\x82\x05V\x06\x0b*\x86H\x86\xf7\r\x01\x0c\n\x01\x02\xa0\x82\x#TRUNCATING HERE
Traceback (most recent call last):
File "./test.py", line 17, in <module>
outputStr = b64decodedBytes.decode('UTF-8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x82 in position 1: invalid start byte
我想我已经没有想法了,现在花了一天多的时间:(
我在做什么错?
答案 0 :(得分:0)
您的base64解码逻辑对我来说很好。您面临的问题可能是由于字符编码不匹配。调用create
(您的foo.json文件)后收到的响应正文可能未使用UTF-8编码。检出响应头的Content-Type
字段。它应该看起来像这样:
Content-Type: text/javascript; charset=Shift_JIS
尝试使用内容类型中使用的编码对base64解码的字符串进行解码
b64decodedBytes.decode('Shift_JIS')