获取未知格式字符串并返回UTF8字符串

2024-05-19 13:25:05 发布

您现在位置:Python中文网/ 问答频道 /正文

以下两个字符串格式不同,但数据相同:

str1 = '\xd7\x91\xd7\xa8\xd7\xa7'
str2 = u'\u05d1\u05e8\u05e7'

我需要实现以下功能:

  • 以上述任一格式的字符串作为输入
  • 以第一种格式返回等效字符串作为输出

我知道我可以把第二种格式的字符串编码成第一种格式。你知道吗

但是如何确定输入字符串确实是以第二种格式给出的呢?你知道吗


Tags: 数据字符串功能编码格式str1str2xa7
1条回答
网友
1楼 · 发布于 2024-05-19 13:25:05

对于python3.x,正确的做法可能是try调用encode。(对于3.5+,这个will hopefully就像try s.encode('utf-8') except AttributeError: s一样简单。)

但是对于2.x,encode即使在str1上也会成功—首先将UTF-8字符串解码为ASCII(或者sys.getdefaultencoding()返回的任何内容),这样它就可以重新编码它,所以您肯定不希望这样。你知道吗

当无法安全地EAFP时,您别无选择,只能LBYL。所以:

if isinstance(s, unicode):
    return s.encode('utf-8')
else:
    return s

注意,我在这里使用的是^{},而不是调用type和比较。正如PEP 8所说:

Object type comparisons should always use isinstance() instead of comparing types directly.

为什么?因为根据定义,子类型的实例(子类、用abc注册的类等)总是被认为是它们的父类型的实例。在一些罕见的情况下,您需要显式地打破这个规则,在这种情况下type比较就是您想要的。否则,不要使用它们。你知道吗

相关问题 更多 >