给定一个字符串,我怎么知道它是否需要解码

时间:2009-10-07 16:01:33

标签: python base64

我正在使用python的base64模块,我得到一个可以编码或不编码的字符串。我想做点什么:

if isEncoded(s):
   output = base64.decodestring(s)
else:
   output = s

想法?

3 个答案:

答案 0 :(得分:10)

一般来说,这是不可能的;例如,如果您收到字符串'MjMj',您怎么可能知道它是否已经解码并且需要按原样使用,还是解码为'23#'?

答案 1 :(得分:5)

你可以尝试一下,看看会发生什么:

import base64

def decode_if_necessary(s):
    try:
         return base64.decodestring(s)
    except:
         return s

但是你必须问自己:如果原始消息实际上是一个语法上有效的base64字符串,但不是一个字符串怎么办?然后“解码”它将成功,但结果不是所需的输出。所以我不得不问:这个真的你想要什么吗?

修改:请注意,decodestring已弃用。

答案 2 :(得分:4)

您可以查看字符串may be base64 encoded。一般来说,函数可以预测75%以上的精度是数据被编码。

def isBase64(s):
    return (len(s) % 4 == 0) and re.match('^[A-Za-z0-9+/]+[=]{0,2}$', s)