给定字符串,如何判断是否需要解码
我在使用Python的base64模块,得到一个字符串,这个字符串可能是编码过的,也可能没有编码。我想做一些类似于下面的事情:
if isEncoded(s):
output = base64.decodestring(s)
else:
output = s
有什么想法吗?
4 个回答
5
你可以检查一下一个字符串是否可能是用 base64 编码的。一般来说,这个功能可以以超过 75% 的准确率判断数据是否被编码过。
def isBase64(s):
return (len(s) % 4 == 0) and re.match('^[A-Za-z0-9+/]+[=]{0,2}$', s)
5
你可以试试看,看看会发生什么:
import base64
def decode_if_necessary(s):
try:
return base64.decodestring(s)
except:
return s
但是你得问问自己:如果原始信息其实是一个语法上有效的base64字符串,但并不是想要的那种呢?那么“解码”它会成功,但结果可能不是你想要的输出。所以我得问:这真的是你想要的吗?
补充:请注意,decodestring
这个方法已经不推荐使用了。
11
一般来说,这是不可能的;比如说你收到一个字符串'MjMj',你怎么知道它是已经解码过的,应该直接使用,还是需要解码成'23#'呢?