[英]python 3.8.6 - converting a string to byte like object
我有這個價值
{'_id'
{'_data': 825FABE6C1000000012B022C0100296E5A100422555F0A203C4F84A0150B250434473D46645F696400645FABE6C1786E540BB69619380004
}
}
我使用字符串類型的change['_id']['_data']
檢索此值。
我如何將它轉換為像 python 中的對象的字節?
我試過這個
base64.b64encode(change['_id']['_data']).decode()
但我仍然收到錯誤
TypeError: a bytes-like object is required, not 'str'
筆記
正如@SGT所指出的,您的數據恰好是一個有效的 base 16 字符串,這使得它實際上已經用 base 64 編碼的可能性有點小。您知道實際的編碼 - 使用不同的編解碼器解碼是至關重要的只會產生垃圾。
/筆記
在您的代碼中,您正在調用base64.b64encode
而不是base64.b64decode
但base64.b64decode
base-64 str
解碼為bytes
您需要后者。
>>> import base64
>>> s = "825FABE6C1000000012B022C0100296E5A100422555F0A203C4F84A0150B250434473D46645F696400645FABE6C1786E540BB69619380004"
>>> base64.b64decode(s)
b'\xf3nE\x00\x11:\x0b]4\xd3M4\xd3]\x81\xd3m\x82\xd3]4\xdb\xde\x84\xe4\rt\xd3\x8d\xb6\xe7\x9eE\xd0\r\xb4\xdc.\x05\xf3\x804\xd7\x9d\x01\xdb\x9d8\xdf\x8e;\xdc>:\xeb\x8eE\xeb\xde\xb8\xd3N\xb8\xe4P\x01\x13\xa0\xb5\xef\xce\x84\xe7\x8d\x01\x07\xafz\xd7\xdd\xfc\xd3M8'
>>> bytes.fromhex(s)
b'\x82_\xab\xe6\xc1\x00\x00\x00\x01+\x02,\x01\x00)nZ\x10\x04"U_\n <O\x84\xa0\x15\x0b%\x044G=Fd_id\x00d_\xab\xe6\xc1xnT\x0b\xb6\x96\x198\x00\x04'
>>> bytearray.fromhex(s)
bytearray(b'\x82_\xab\xe6\xc1\x00\x00\x00\x01+\x02,\x01\x00)nZ\x10\x04"U_\n <O\x84\xa0\x15\x0b%\x044G=Fd_id\x00d_\xab\xe6\xc1xnT\x0b\xb6\x96\x198\x00\x04')
如果您想要字符串的 base64 編碼版本,您可以使用base64.b64encode()對字符串encode
,以將您的數據作為 base64 編碼字節獲取:
In [65]: data = "825FABE6C1000000012B022C0100296E5A100422555F0A203C4F84A0150B250434473D46645F696400645FABE6C1786E540BB6
...: 9619380004"
In [66]: base64.b64encode(data.encode('utf-8'))
Out[66]: b'ODI1RkFCRTZDMTAwMDAwMDAxMkIwMjJDMDEwMDI5NkU1QTEwMDQyMjU1NUYwQTIwM0M0Rjg0QTAxNTBCMjUwNDM0NDczRDQ2NjQ1RjY5NjQwMDY0NUZBQkU2QzE3ODZFNTQwQkI2OTYxOTM4MDAwNA=='
然后,可以使用decode()
方法將其轉換為 base64 編碼的字符串:
In [67]: base64.b64encode(data.encode('utf-8')).decode()
Out[67]: 'ODI1RkFCRTZDMTAwMDAwMDAxMkIwMjJDMDEwMDI5NkU1QTEwMDQyMjU1NUYwQTIwM0M0Rjg0QTAxNTBCMjUwNDM0NDczRDQ2NjQ1RjY5NjQwMDY0NUZBQkU2QzE3ODZFNTQwQkI2OTYxOTM4MDAwNA=='
str
可以使用str.encode()
轉換為bytes
bytes
可以使用base64.b64encode()
轉換為 base64 編碼的bytes
decode()
方法,可以將 base64 編碼的bytes
轉換為 base64 編碼的string
。如果您的數據是十六進制字符串,則可以使用
byteArray = bytes.fromhex(change['_id']['_data'])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.