我有一个base64编码的字符串。我已经通过将pdf文件转换为GZ格式然后根据要求将Base64转换为Base64来获得此字符串。我想将它发送到服务器,但我生成的类使用的是Axis2,并且只接受特定soap请求的字节数组。
当我使用时:
base64Str.getBytes()
它再次以UTF-8(默认)对我的字符串进行编码,并更改我要发送的字符串字符。这就是我收到此错误的原因:服务器端文件损坏。当我使用SOAP UI工具发送base64字符串时,它可以正常工作,因此我想将base64字符串转换为字节数组而不更改其字符或执行此任务的其他方法。
**Base64 String**: H4sIAAAAAAAAAKy4dVScy9Y+iLs7wQmu3TgEd3......
**Above string.getBytes()** => EPR3cn7l/pMgVTTS0sz1XzDAAkIgAQjoHkhY....
答案 0 :(得分:0)
这有助于你
import org.apache.commons.codec.binary.Base64;
public class MyTest {
public static void main(String[] args) {
String example = "H4sIAAAAAAAAAKy4dVScy9Y+iLs7wQmu3TgEd3";
Base64 base64 = new Base64();
byte[] decoded = Base64.decodeBase64(example);
}
}
答案 1 :(得分:0)
您可以使用DatatypeConverter的parseBase64Binary,如下所示:
String encoded = "H4sIAAAAAAAAAKy4dVScy9Y+iLs7wQmu3TgEd3......";
byte[] bytes = DatatypeConverter.parseBase64Binary(encoded);
答案 2 :(得分:0)
可能有更好的方法来处理Base64编码,如此处所述,但直接解决您的问题:
String s = "H4sIAAAAAAAAAKy4dVScy9Y+iLs7wQmu3TgEd3";
System.out.println(s);
byte[] bytes = s.getBytes();
System.out.println(new String(bytes));
如果你像这样在目的地重新创建字符串,你就会得到你发送的内容。
答案 3 :(得分:0)
完全绕过String
课程。无论您使用什么代码转换为Base64,都要将数据直接放入byte[]
。
如果您使用的是Java 8,请使用java.util.Base64.Encoder
为您执行此操作。