给定一个函数,如: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'.
添加回答
举报
0/150
提交
取消