给定字符串,如何判断是否需要解码

4 投票
4 回答
5173 浏览
提问于 2025-04-15 14:53

我在使用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#'呢?

撰写回答