2011-05-10 70 views
1

我有下面這段代碼拋出一個警告:如何在Python中進行安全的二進制比較?

UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal

try: 
    f = open_old(filename, "rb") 
    aBuf = f.read(4) 
    f.close() 
except: 
    aBuf=b'' 
if aBuf[:3] == b'\xEF\xBB\xBF': 
    print("...") 

什麼是從文件讀取3個字節,並檢查他們的價值觀的正確方法。

我正在尋找可以在Python 2.6和newwer(包括3.x)中正常工作的解決方案。

+0

對不起,如果這是一個愚蠢的觀察,但你不想說'f.read(3)'讀取3個字節? – 2011-05-10 14:19:18

+0

不完全:) ...這只是一段代碼的摘錄。無論如何,我已經找到了適用於Python 2.x和3.x的解決方案。請在https://github.com/ssbarnea/tendo/blob/master/tendo/unicode.py#L23 – sorin 2011-05-10 14:47:30

+0

檢查它。然後,您應該將答案添加到此主題中,然後接受它。 – 2011-05-10 14:49:31

回答

1

解決方法是在讀取字符串後將字符串轉換爲字節:aBuf = bytes(f.read(4))

+0

我在Python中打開了關於二進制轉換的新主題http://stackoverflow.com/q/31322641/54964是您的系統Linux還是Windows?你的文件是二進制的嗎 – 2015-07-09 16:01:26

+0

您以二進制模式打開文件;這意味着在Python 3中你已經獲得了'bytes()'。在Python 2中,'bytes'是'str'的​​別名,並且你已經*從'file.read()'調用中獲得'str'對象。對以二進制模式打開的文件對象使用'bytes()'**不會產生任何影響**。 – 2015-07-09 17:15:11