簡體   English   中英

Python bytearray忽略編碼?

[英]Python bytearray ignoring encoding?

我有一大塊代碼從字符串緩沖區( StringIO對象)讀取二進制數據,並嘗試將其轉換為bytearray對象,但是當值大於127時,它會拋出錯誤,ascii編碼不能處理,即使我試圖覆蓋它:

file = open(filename, 'r+b')
file.seek(offset)
chunk = file.read(length)
chunk = zlib.decompress(chunk)
chunk = StringIO(chunk)

d = bytearray(chunk.read(10), encoding="iso8859-1", errors="replace")

運行該代碼給了我:

  d = bytearray(chunk.read(10), encoding="iso8859-1", errors="replace")
UnicodeDecodeError: 'ascii' codec can't decode byte 0xf0 in position 3: ordinal not in range(128)

顯然240(0xf0的十進制數)不能適合ascii編碼范圍,但這就是我明確設置編碼的原因。 但它似乎忽略了它。

將字符串轉換為另一種編碼時,如果它是一個str或Unicode(如果它是一個unicode對象),則其原始編碼將被視為ASCII。 創建bytearray ,僅當字符串為unicode時才需要encoding參數。 只是不指定編碼,您將獲得所需的結果。

我不太清楚問題是什么。

StringIO用於字符串IO,不用於二進制IO。 如果要獲取表示文件整個內容的bytearray,請使用:

with open ('filename', 'r') as file: bytes = bytearray (file.read () )

如果要獲取僅包含該文件中包含的ascii字符的字符串,請使用:

with open ('filename', 'r') as file: asciis = file.read ().decode ('ascii', 'ignore')

(如果在Windows上運行它,您可能需要二進制標志來打開文件。

暫無
暫無

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

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