解决 java.util.Base64 报错 Illegal base64 character 的问题

直接上代码:

报错的代码:

String decode = new String(Base64.getDecoder().decode(str),"utf-8");

应改为:

String s = new String(Base64.getDecoder().decode(sb.toString().replace("\r\n", "")),"utf-8");

 

报错:

java.lang.IllegalArgumentException: Illegal base64 character d
    at java.util.Base64$Decoder.decode0(Unknown Source)

    ……

原因: java自带Base64工具需要把Base64中的换行去掉才能正常使用。

我的Base64文本:

PCFET0NUWVBFIGh0bWw+PGh0bWw+CTxoZWFkPgkJPG1ldGEgY2hhcnNldD0iVVRG
LTgiPgkJPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmlj
ZS13aWR0aCxpbml0aWFsLXNjYWxlPTEsbWluaW11bS1zY2FsZT0xLG1heGltdW0t
c2NhbGU9MSx1c2VyLXNjYWxhYmxlPW5vIiAvPgkJPHRpdGxlPjwvdGl0bGU+CQk8
c3R5bGUgdHlwZT0idGV4dC9jc3MiPgkJCWJvZHksCQkJaDEsCQkJaDIsCQkJaDMs
CQkJaDQsCQkJaDUsCQkJaDYs……

这段文本中有多个换行,需要去掉换行,把"\r\n"换成""。

String decode = new String(Base64.getDecoder().decode(str),"utf-8");

  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
根据提供的引用内容,出现"java.lang.IllegalArgumentException: Illegal base64 character"异常是因为在Base64编码中出现了非法字符。这个异常通常发生在使用Java 8的java.util.Base64类进行Base64解码时。 在Java 8之前的版本中,Base64编码使用的是RFC 2045规范,它只允许使用A-Z、a-z、0-9、+和/这些字符。但是在Java 8中,Base64编码使用的是RFC 4648规范,它允许使用A-9、+、/以及=这些字符。 所以,当使用Java 8的java.util.Base64类进行Base64解码时,如果出现了非法字符,就会抛出"java.lang.IllegalArgumentException: Illegal base64 character"异常。 为了解决这个问题,你可以在解码之前先对Base64字符串进行处理,将非法字符替换为合法字符。例如,你可以使用正则表达式将非法字符替换为'=',然后再进行解码。 以下是一个示例代码,演示了如何处理"java.lang.IllegalArgumentException: Illegal base64 character"异常: ```java import java.util.Base64; public class Base64Example { public static void main(String[] args) { String base64String = "SGVsbG8gV29ybGQh"; // 包含非法字符的Base64字符串 // 将非法字符替换为'=' base64String = base64String.replaceAll("[^A-Za-z0-9+/=]", "="); // 解码Base64字符串 byte[] decodedBytes = Base64.getDecoder().decode(base64String); String decodedString = new String(decodedBytes); System.out.println(decodedString); } } ``` 这段代码首先将非法字符替换为'=',然后使用Base64.getDecoder().decode()方法解码Base64字符串,并将解码后的字节数组转换为字符串进行输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值