将字符串对象与在Python 2和Python 3中都有效的字节对象进行比较的最佳方法是什么?假设两者都是utf8
。更一般地说,如何编写两个对象的Python 2和Python 3兼容比较,这两个对象可能都是字符串,字节或unicode对象?
问题是{2}在Python 2中为True而在Python 3中为False
同时,人们不能盲目地编码或解码对象,因为Python 2中的字符串同时具有"asdf" == b"asdf"
和encode
方法,但Python 3中的字符串只有编码方法。
最后,对于Python 2中的任何非unicode字符串,decode
返回True,并且仅对Python 3中的字节对象返回True。
答案 0 :(得分:5)
在Python 2和Python 3中,任何bytes
实例都有解码方法。因此,您可以执行以下操作:
def compare(a, b, encoding="utf8"):
if isinstance(a, bytes):
a = a.decode(encoding)
if isinstance(b, bytes):
b = b.decode(encoding)
return a == b
答案 1 :(得分:3)
您可以检查您是否使用Python 2或3并采取相应措施:
import sys
if sys.version_info[0] < 3:
text_type = unicode
else:
text_type = str
if isinstance(obj, text_type):
result = obj.encode('utf-8')
else:
result = obj