小智 33
import base64
import binascii
try:
base64.decodestring("foo")
except binascii.Error:
print "no correct base64"
Run Code Online (Sandbox Code Playgroud)
id0*_*d01 21
我正在寻找解决同样问题的方法,然后一个非常简单的解决方案让我头疼.您需要做的就是解码,然后重新编码.如果重新编码的字符串等于编码的字符串,则它是base64编码的.
这是代码:
import base64
def isBase64(s):
try:
return base64.b64encode(base64.b64decode(s)) == s
except Exception:
return False
Run Code Online (Sandbox Code Playgroud)
而已!
编辑:这是一个与Python 3中的字符串和字节对象一起使用的函数版本:
import base64
def isBase64(sb):
try:
if isinstance(sb, str):
# If there's any unicode here, an exception will be thrown and the function will return false
sb_bytes = bytes(sb, 'ascii')
elif isinstance(sb, bytes):
sb_bytes = sb
else:
raise ValueError("Argument must be string or bytes")
return base64.b64encode(base64.b64decode(sb_bytes)) == sb_bytes
except Exception:
return False
Run Code Online (Sandbox Code Playgroud)
这是不可能的.您可以做的最好的事情是验证字符串可能是有效的Base 64,尽管许多仅由ASCII文本组成的字符串可以被解码,就好像它们是Base 64一样.
我使用的解决方案基于先前的答案之一,但使用了更多最新调用。
在我的代码中, my_image_string 要么是原始形式的图像数据本身,要么是 base64 字符串。如果解码失败,那么我认为它是原始数据。
请注意 的validate=True关键字参数 b64decode。这是解码器生成断言所必需的。没有它,就不会有关于非法字符串的投诉。
import base64, binascii
try:
image_data = base64.b64decode(my_image_string, validate=True)
except binascii.Error:
image_data = my_image_string
Run Code Online (Sandbox Code Playgroud)
使用 Python 正则表达式
import re
txt = "VGhpcyBpcyBlbmNvZGVkIHRleHQ="
x = re.search("^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$", txt)
if (x):
print("Encoded")
else:
print("Non encoded")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23926 次 |
| 最近记录: |