将字符串与在Python 2和3中都有效的字节进行比较

Zag*_*ags 4 python string bytearray python-2.x python-3.x

将字符串对象与在Python 2和Python 3中都有效的字节对象进行比较的最佳方法是什么?假设两者都是utf8.更一般地说,如何编写Python 2和Python 3兼容的两个对象的比较,每个对象可能是字符串,字节或unicode对象?

问题是"asdf" == b"asdf"Python 2 中为True,Python 3中为False

同时,人们不能盲目地编码或解码对象,因为Python 2中的字符串都有encodedecode方法,但Python 3中的字符串只有编码方法.

最后,isinstance(obj, bytes)对于Python 2中的任何非unicode字符串,返回True,并且仅返回Python 3中的字节对象的True.

Zag*_*ags 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
Run Code Online (Sandbox Code Playgroud)