gpt4 book ai didi

python - six.text_type 与 text.decode ('utf8' 相同吗?

转载 作者:太空宇宙 更新时间:2023-11-03 15:30:21 25 4
gpt4 key购买 nike

给定一个函数:

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) 函数是否等同于 six.text_type(text) ?

def convert_to_unicode(text):
return six.text_type(text)

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

最佳答案

由于 six.text_type 只是对 strunicode 类型的引用,因此等效函数如下:

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'

关于python - six.text_type 与 text.decode ('utf8' 相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58228438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com