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