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

时间:2016-06-16 21:49:56

标签: python string python-3.x bytearray python-2.x

将字符串对象与在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。

2 个答案:

答案 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