为了账号安全,请及时绑定邮箱和手机立即绑定

Java Base64 Encode 函数与 PHP Base64 Encode 函数相同吗?

Java Base64 Encode 函数与 PHP Base64 Encode 函数相同吗?

米脂 2023-07-19 15:44:18
我正在尝试使用客户端提供的值来测试 PHP 中的 Soap Security 标头。他们提供的价值就像...wTAmCL9tmg6KNpeAQOYubw==...并说这是一个 Base64 编码值。然而,当我通过 PHP 的 Base64 解码函数运行它时......base64_decode("wTAmCL9tmg6KNpeAQOYubw==");它将其翻译为:�0&�m6@�.o如果我用Java解码它......import java.util.Base64;import java.util.Arrays;/** * hello */public class hello {    public static void main(String[] args) {        Base64.Decoder decoder = Base64.getDecoder();        Base64.Encoder encoder = Base64.getEncoder();        String stringEncoded = "wTAmCL9tmg6KNpeAQOYubw==";        System.out.println("This is a decoded value: " + decoder.decode(stringEncoded));        System.out.println("This is a re-coded value: " + encoder.encode(decoder.decode(stringEncoded)));    }}我得到一个像这样的解码字符串:[B@7229724f但是如果我尝试重新编码该字符串,我会得到以下结果:[B@4c873330我在这里缺少什么?
查看完整描述

2 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

您缺少的是解码 Base 64 值的结果并不打算作为字符串打印。事实上,您可以在 Java println 的输出中看到这一点。[B@7229724f 不是解码字节的字符串表示形式。这是 Java byte[] 的打印方式。[B表示字节数组,其余字符是对象标识的十六进制数字。(对于每个字节数组实例,它都会以不同的方式打印,并且与数组的内容无关。)

如果您想要字节的字符串表示形式,则需要从字节构造一个字符串:

    System.out.println("This is a decoded value: " + new String(decoder.decode(stringEncoded), StandardCharsets.UTF_8));
    System.out.println("This is a re-coded value: " + new String(encoder.encode(decoder.decode(stringEncoded), StandardCharsets.UTF_8));


查看完整回答
反对 回复 2023-07-19
?
呼唤远方

TA贡献1856条经验 获得超11个赞

推荐的编码是 UTF-8。



查看完整回答
反对 回复 2023-07-19
  • 2 回答
  • 0 关注
  • 222 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信