猿问

Six.text_type 和 text.decode('utf8') 一样吗?

给定一个函数,如:


import six


def convert_to_unicode(text):

  """Converts `text` to Unicode (if it's not already), assuming utf-8 input."""

  if six.PY3:

    if isinstance(text, str):

      return text

    elif isinstance(text, bytes):

      return text.decode("utf-8", "ignore")

    else:

      raise ValueError("Unsupported string type: %s" % (type(text)))

  elif six.PY2:

    if isinstance(text, str):

      return text.decode("utf-8", "ignore")

    elif isinstance(text, unicode):

      return text

    else:

      raise ValueError("Unsupported string type: %s" % (type(text)))

  else:

    raise ValueError("Not running on Python2 or Python 3?")

由于six处理了 python2 和 python3 的兼容性,上述convert_to_unicode(text)函数是否等同于 just six.text_type(text)?IE


def convert_to_unicode(text):

    return six.text_type(text)

是否存在原始convert_to_unicode捕获但six.text_type不能捕获的情况?


牛魔王的故事
浏览 284回答 1
1回答

慕的地6264312

由于six.text_typeist 只是对strorunicode类型的引用,因此等效函数将是:def convert_to_unicode(text):    return six.text_type(text, encoding='utf8', errors='ignore')但它在极端情况下的行为并不相同,例如。它会很高兴地转换一个整数,所以你必须先在那里做一些检查。另外,我不明白您为什么要拥有errors='ignore'. 你说你假设 UTF-8。但是,如果违反此假设,您将默默地删除数据。我强烈建议使用errors='strict'.编辑:text我刚刚意识到,如果已经是您想要的,这将不起作用。此外,它很高兴为任何非字符串输入引发 TypeError。那么这个怎么样:def convert_to_unicode(text):    if isinstance(text, six.text_type):        return text    return six.text_type(text, encoding='utf8', errors='ignore')这里发现的唯一极端情况是 Python 版本既不是 2 也不是 3。我仍然认为你应该使用errors='strict'.
随时随地看视频慕课网APP

相关分类

Python
我要回答