Java Python-如何解码RFC2045 Base64字符串

Java Python-如何解码RFC2045 Base64字符串,java,python,base64,apache-commons,Java,Python,Base64,Apache Commons,找不到解码RFC2045格式base64字符串的方法 我试图在Python3中解码RFC2045格式的base64字符串,但无法找到与org.apache.commons.codec.binary.base64.decodeBase64相同的结果 以下是Java代码: import static org.apache.commons.codec.binary.Base64.decodeBase64; String str1 = "j-FH-F9__CIiwyg0o3A2mKflRBnxZSMw

找不到解码RFC2045格式base64字符串的方法

我试图在Python3中解码RFC2045格式的base64字符串,但无法找到与
org.apache.commons.codec.binary.base64.decodeBase64
相同的结果

以下是Java代码:

import static org.apache.commons.codec.binary.Base64.decodeBase64;

String str1 = "j-FH-F9__CIiwyg0o3A2mKflRBnxZSMwktDJQyvRevc";
byte[] b1 = decodeBase64(str1);
System.out.println(b1.length + " " + b1);
以及Python 3代码:

导入base64
从电子邮件导入base64mime
def字节2列表(bdata):
返回[b如果b<128,则返回b;如果b数据中b为256,则返回b]
b64str='j-FH-F9_uuuCiiwyg0O3A2MKFLRBNxzsmwktdjqyvrevc'
b64str+=“=”*((4-len(b64str)%4)%4)
b1=base64.B64解码(b64str)
b2=base64mime.decode(b64str)
打印(len(b1),Bytes2列表(b1))
打印(len(b2),Bytes2列表(b2))
Java程序输出:
32[-113、-31、71、-8、95、127、-4、34、34、-61、40、52、-93、112、54、-104、-89、-27、68、25、-15、101、35、48、-110、-48、-55、67、43、-47、122、-9]

Python输出:
29[-116,81,-59,-12,34,34,-61,40,52,-93,112,54,-104,-89,-27,68,25,-15,101,35,48,-110,-48,-55,67,43,-47,122,-9]
用于
base64.b64解码
base64mime.b64解码

我希望这不是一个非常罕见的情况,但只是找不到一个方法来正确。有什么提示吗?

在中找到了答案。代码应为:

b1=base64.urlsafe\u b64解码(b64str)

str1='j-…'
在Java中无效,并且
jshell>Base64.getDecoder().decode(“j-FH-F9_uciiwyg0o3a2mkflrbnxzsmwktdjqyvrevc”);异常Java.lang.IllegalArgumentException:非法的Base64字符2d
(减号是无效的Base64)更宽松:
jshell>Base64.getmiedecoder().decode(“j-FH-F9_uuuciiwyg0o3a2mkflrbnxzsmwktdjqyvrevc”)=>字节[29]{-116,81,-59,-12,34,34,-61,40,52,-93,112,54,-104,-89,-27,68,25,-15,101,35,48,-110,-48,-55,67,43,-47,122,-9}——考虑使用java附带的解码器…我使用Groovy运行java代码。抱歉错过了单VS双引号发行。数据用RFC 2045编码,只有Apache才对它进行正确解码。需要用Python 3做同样的事情。数据不是RFC 2045编码的。它是RFC 4648节5编码的,使用“URL和文件名安全字母表”,用“-”和“-”代替常用的“+”和“/”字符。要在Python中解码此数据,请使用
base64
模块的
urlsafe\u b64decode
方法。