在 PHP/Java for Android 之间对数据进行编码/解码

2022-09-04 20:54:20

我必须解码从PHP服务器收到的base64编码数据。

服务器使用“base64_encode”对数据进行编码。

在我的Android应用程序中,我使用android.utils.Base64类进行解码。

原始加密数据 = “†+Ü]M(‡=ñö”
PHP 中的 Base64 编码数据给出 - “hisP3F1NBCgIAocQCD3x9g==”
Android 中的 Base64 编码数据给出 - “4oCgKw/DnF1NBCgIAuKAoRAIPcOxw7Y=”

如您所见,Java 编码字符串比 PHP 编码字符串长。我需要找出它们的默认编码格式。

如何从两者中获取相同的编码字符串?

Java/Android 代码 :

String encrypted = "†+Ü]M(‡=ñö";
byte[] encoded = Base64.encode(encrypted.getBytes(), Base64.DEFAULT);
String str = new String(encoded); //str = "4oCgKw/DnF1NBCgIAuKAoRAIPcOxw7Y="  

答案 1

在Java中尝试此操作:这将为您提供字符串的长版本(UTF-8)

byte[] encoded = Base64.encode(encrypted.getBytes("UTF-8"), Base64.DEFAULT);
String str = new String(encoded, "UTF-8");

更新:

在Java中尝试此操作:这将为您提供字符串的简短版本(CP1252)

// This should give the same results as in PHP
byte[] encoded = Base64.encode(encrypted.getBytes("CP1252"), Base64.DEFAULT);
String str = new String(encoded, "CP1252");

或者试试这个PHP脚本:

文件: 测试.php

<?php

echo base64_encode($_GET['str'])." Default UTF-8 version<br />";
echo base64_encode(iconv("UTF-8","CP1252",$_GET['str']))." CP1252 Version <br />";

?>

usage: http://[SOMEDOMAIN]/test.php?str=†+Ü]M(‡=ñö

答案 2

对我来说,CP1252不起作用,因为它在非字母数字符号中失败了。我发现的最好的字符集是ISO-8859-1,使用方法如下:

Base64.getEncoder()
                .encodeToString(
                    stringToBeEncoded.getBytes(
                        Charset.forName("ISO-8859-1")))

推荐