Closed. This question is not reproducible or was caused by typos。它当前不接受答案。
                            
                        
                    
                
            
                    
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        4年前关闭。
                    
                
        

我创建了一些应该起作用的代码:

String input = "PONT4uYmTYwiP0omcAxZG8a3vKI=";
String expectedOut = "3ce353e2e6264d8c223f4a26700c591bc6b7bca2";

Base64.Decoder decoder = Base64.getDecoder();
byte[] outAsByte = decoder.decode(input);
String output = new String(outAsByte, StandardCharsets.UTF_8);

System.out.println(input);
System.out.println(output);


(基于How do I decode a base64 encoded string?-我知道它在C#中)

令人惊讶的是,这将输出以下内容:

PONT4uYmTYwiP0omcAxZG8a3vKI=
<?S??&M?"?J&pY???


为什么这会打印出一堆乱码而不是预期的输出?

编辑:我使用此bash命令获得了预期的输出:

echo -n PONT4uYmTYwiP0omcAxZG8a3vKI= | base64 -d | xxd -p

最佳答案

xxd的手册页中


  xxd创建给定文件或标准输入的十六进制转储。


您正在为解码值进行十六进制转储。

您可以使用here提供的实用程序复制它

System.out.println(Hex.encodeHexString(outAsByte));


产生

3ce353e2e6264d8c223f4a26700c591bc6b7bca2


符合您的

                  //  3ce353e2e6264d8c223f4a26700c591bc6b7bca2
String expectedOut = "3ce353e2e6264d8c223f4a26700c591bc6b7bca2";

08-04 07:32