進一步討論此問題:Handling and working with binary data HEX with python(並感謝我收到的真棒指針)我被困在工具的最後一個方面。Python - 將原始二進制轉儲轉換爲ASCII HEX字節
我基本上是爲通過EOF標記的數據編寫一個文件清理器。這額外的數據意味着他們失敗了一些驗證工具我需要去除額外的數據,所以他們被提交給驗證器,但是我不想丟掉這些數據(事實上我必須保留它...)
我已經寫了一個XML容器來保存數據,以及一些其他出處/審計類型的值,但我仍然堅持優雅地在原始二進制文件和可以「烘焙」到文件中的東西之間移動。
例如:
JPG文件與(十六進制編輯器視圖)結束 96 1a 9c fd ab 4f 9e 69 27 ad fd da 0a db 76 bb ee d2 6a fd ff 00 ff d9 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
爲JPG的EOF標記是ff d9
,所以清潔器的工作原理反向通過文件,直到其抵靠EOF標記匹配。在這種情況下,它會創建一個新的JPG文件在ff d9
停止,然後嘗試剝離數據寫入到XML(通過ElementTree的LIB):changeString.text =str(excessData)
當然作爲XML作家正在寫這不會工作ASCII不是二進制轉儲。
在上述情況下,錯誤的是UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 0: ordinal not in range(128)
,我可以看到,如果因爲它不是一個有效的ASCII字符
我的問題因此,這是我該如何優雅處理這個原始數據,在某種程度上,它可以存儲並在未來使用? (我打算寫一個'uncleaner的下,可以採取一個乾淨的文件和XML和重建原始文件...)
______EDIT_______
使用從下面的建議,這是回溯:
Traceback (most recent call last):
File "C:\...\EOF_cleaner\scripts\test6.py", line 87, in <module> main()
File "C:\...\EOF_cleaner\scripts\test6.py", line 73, in main splitFile(f_data, offset)
File "C:\...EOF_cleaner\scripts\test6.py", line 60, in splitFile makeXML(excessData)
File "C:\...\EOF_cleaner\scripts\test6.py", line 53 in makeXML ET.ElementTree(root).write(noteFile)
File "c:\python27\lib\xml\etree\ElementTree.py", line 815, in write serialize(write, self._root, encoding, qnames, namespaces)
File "c:\python27\lib\xml\etree\ElementTree.py", line 934, in _serialize_xml_serialize_xml(write, e, encoding, qnames, None)
File "c:\python27\lib\xml\etree\ElementTree.py", line 934, in _serialize_xml_serialize_xml(write, e, encoding, qnames, None)
File "c:\python27\lib\xml\etree\ElementTree.py", line 934, in _serialize_xml_serialize_xml(write, e, encoding, qnames, None)
File "c:\python27\lib\xml\etree\ElementTree.py", line 932, in _serialize_xml write(_escape_cdata(text, encoding))
File "c:\python27\lib\xml\etree\ElementTree.py", line 1068, in _escape_cdata return text.encode(encoding, "xmlcharrefreplace")
UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 0: ordinal not in range(128)
拋出事物的線是changeString.text = excessData.encode('base64')
(線45)和ET.ElementTree(root).write(noteFile)
(線53)
試圖寫'unicode(str(excessData))'? –
@MahmoudAladdin謝謝,但是這給出了同樣的錯誤! –
你的回溯表明,某個* else *也將二進制數據添加到你的樹*。如果你完全禁用'changeString.text'這行,你還會得到這個錯誤嗎? –