以下两个字符串的格式不同,但数据相同:
str1 = '\xd7\x91\xd7\xa8\xd7\xa7'
str2 = u'\u05d1\u05e8\u05e7'
我需要实现以下功能:
我知道我可以将第二种格式的字符串编码为第一种格式。
但是如何确定输入字符串确实以第二种格式给出?
答案 0 :(得分:1)
对于Python 3.x,正确的做法可能是try
来调用encode
。 (对于3.5+,此will hopefully就像try s.encode('utf-8') except AttributeError: s
一样简单。)
但对于2.x,encode
即使在str1
上也会成功 - 首先将UTF-8字符串解码为ASCII(或任何sys.getdefaultencoding()
返回),以便它可以重新对它进行编码,所以你绝对不想要它。
if isinstance(s, unicode):
return s.encode('utf-8')
else:
return s
请注意,我在这里使用isinstance
,而不是调用type
并进行比较。正如PEP 8所说:
对象类型比较应始终使用
isinstance()
,而不是直接比较类型。
为什么呢?因为根据定义,子类型的实例(子类,用ABC注册的类等)应该总是被视为其超类型的实例。在某些极少数情况下,您明确需要违反该规则,在这种情况下type
比较是您想要的。但否则,不要使用它们。