簡體   English   中英

將二進制(字節)轉換為str,反之亦然

[英]Converting binary (bytes) to str and vice versa

考慮我有一個二進制數據,例如在dataframe的列中:

b'x\\x9c\\xd4\\x14Q\\xd3\\xf7\\x92\\x8b\\x89 \\x01\\xc3)B\\x8c\\x80\\x91#\\x86\\xfb\\xa6\\x9b\\x10\\xce\\x00\\x86p\\x85Cr\\x11\\xd8p\\x84\\xcc\\x12<A\\x17!'

我需要一個想法如何僅將其轉換為每個binary列值的字符串,因為此dataframe需要轉換為json類型並作為rest api端點的結果傳遞。

這是我如何以json格式返回dataframe (使用二進制dataframedataframe會引發異常):
return json.loads(df.to_json(orient='table'))
df是一個數據框

我當然會想知道如何將二進制值從bytes字符串表示形式轉換回bytes -再次為二進制。

您需要知道用於創建這些字節的編碼。 默認編碼是特定於平台的,請檢查以下內容:

import sys
sys.getdefaultencoding() # 'utf-8' on macos python 3.7

如果將字符串傳遞給pickle.dumps ,它將使用默認編碼進行編碼;如果要使用其他編碼,則可以在將字符串傳遞給pickle.dumps之前對其進行pickle.dumps (例如)。

In [2]: pickle.dumps('höy') # will be 'utf-8' encoded by default
Out[2]: b'\x80\x03C\x04h\xc3\xb6yq\x00.'

In [3]: 'höy'.encode('utf-8')
Out[3]: b'h\xc3\xb6y' # compare with the previous output

In [4]: pickle.dumps('höy'.encode('latin1'))
Out[4]: b'\x80\x03C\x03h\xf6yq\x00.'

In [5]: 'höy'.encode('latin1')
Out[5]: b'h\xf6y' # compare with the previous output

根據編碼,您可以解碼字符串:

In [1]: 'höy'.encode('utf-8').decode('utf-8')
Out[1]: 'höy'

In [2]: 'höy'.encode('latin-1').decode('latin-1')
Out[2]: 'höy'

使用錯誤的編碼將導致失敗或錯誤的結果:

In [3]: 'höy'.encode('utf-8').decode('latin-1')
Out[3]: 'höy'

並非每個隨機字節都是編碼字符串:

In [6]: pickle.dumps('höy').decode('utf-8')
---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-6-2b1872a5aa1a> in <module>
----> 1 pickle.dumps('höy').decode('utf-8')

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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