簡體   English   中英

python 3.8.6 - 將字符串轉換為類似字節的對象

[英]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

在您的代碼中,您正在調用base64.b64encode而不是base64.b64decodebase64.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'

解碼 base16

>>> 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')

關於bytesbytes bytearray區別

如果您想要字符串的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM