我正在嘗試使用客戶端提供的值來測試 PHP 中的 Soap Security 標(biāo)頭。他們提供的價(jià)值就像...wTAmCL9tmg6KNpeAQOYubw==...并說這是一個(gè) Base64 編碼值。然而,當(dāng)我通過 PHP 的 Base64 解碼函數(shù)運(yùn)行它時(shí)......base64_decode("wTAmCL9tmg6KNpeAQOYubw==");它將其翻譯為:?0&??m?6?@?.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))); }}我得到一個(gè)像這樣的解碼字符串:[B@7229724f但是如果我嘗試重新編碼該字符串,我會得到以下結(jié)果:[B@4c873330我在這里缺少什么?
2 回答

素胚勾勒不出你
TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超9個(gè)贊
您缺少的是解碼 Base 64 值的結(jié)果并不打算作為字符串打印。事實(shí)上,您可以在 Java println 的輸出中看到這一點(diǎn)。[B@7229724f 不是解碼字節(jié)的字符串表示形式。這是 Java byte[] 的打印方式。[B表示字節(jié)數(shù)組,其余字符是對象標(biāo)識的十六進(jìn)制數(shù)字。(對于每個(gè)字節(jié)數(shù)組實(shí)例,它都會以不同的方式打印,并且與數(shù)組的內(nèi)容無關(guān)。)
如果您想要字節(jié)的字符串表示形式,則需要從字節(jié)構(gòu)造一個(gè)字符串:
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));
添加回答
舉報(bào)
0/150
提交
取消