簡體   English   中英

為什么Python中的bytearray函數將一個字節變成兩個字節?

[英]Why does bytearray function in Python turn one byte into two bytes?

我正在嘗試在 Python 中創建一個數據編碼器。 我使用自己獨特的底層對稱算法將單個 8 位字節編碼為另一個 8 位字節,然后使用相同的算法對其進行解碼。

我正在使用 Python 的 bytearray 函數將字符串轉換為字節。 但是我遇到了這個問題:十六進制 xAB 可以用二進制表示為1010 1011 然而,當我在字符串表示形式("\\xAB")上使用字節數組時,我得到:

>>> byte = bytearray("\xAB", "utf-8")
>>> print(byte)
bytearray(b'\xc2\xab')

顯然,字符串以\\xAB的單個字節表示,但為什么另一個字節\\xC2被添加到字節數組中? 我使用 UTF-8 對數據進行編碼,因為這是 Python 的默認設置,但我應該使用不同的編碼嗎? 如何讓 bytearray 只包含表示 xAB 所需的 8 位字節?

"\\xAB"是由單個 Unicode 字符 U+00AB 組成的字符串。 然后使用 UTF-8 編碼將其轉換為字節數組。 但在 UTF-8 中,字符 U+00AB 被編碼為兩個字節——C2、AB。 在這種情況下,第二個字節恰好與輸入字節相同是巧合; 情況並非總是如此。

如果您想處理字節數組,最好將字符串排除在外,因為字符串總是會帶來編碼問題。

錯誤的字節似乎來自字符串中的轉義字符。 當從字符串編碼到字節時,我建議使用 python 的新符號:

>> byte = bytearray(b"xAB")
>> print(byte)
bytearray(b'xAB')

另外,要調試您的代碼,請考慮反轉編碼以查看 python 看到的內容:(顯然不是正確的值)

>>> byte = bytearray("\xAB", "utf-8")
>>> byte.decode()
'«'

使用上面提供的更改,返回正確的值:

>>> byte = bytearray(b'xAB')
>>> byte.decode()
'xAB'

暫無
暫無

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

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