为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

牛魔王的故事 2022-06-14 15:29:57
给定一个函数,如:import sixdef 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)?IEdef convert_to_unicode(text):    return six.text_type(text)是否存在原始convert_to_unicode捕获但six.text_type不能捕获的情况?
查看完整描述

1 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

由于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'.


查看完整回答
反对 回复 2022-06-14
  • 1 回答
  • 0 关注
  • 283 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号