PHP/Java for Android之间的数据编码/解码

jxct1oxe  于 2023-01-03  发布在  Android
关注(0)|答案(3)|浏览(132)

我必须解码从PHP服务器接收的base64编码数据。
服务器使用“base64_encode”对数据进行编码。
在我的Android应用程序中,我使用android.utils.Base64类进行解码。
原始加密数据=“†+Ü]M(‡=ñö”
PHP中的Base64编码数据给出-“hisP 3F 1 NBCgIAocQCD 3x 9 g ==”
安卓系统中的Base64编码数据给出-“4 oCgKw/DnF 1 NBCgIAuKAoRAIPcOxw 7 Y =”
正如您所看到的,Java编码的字符串比PHP编码的字符串长,我需要找出它们的默认编码格式。
如何从两者中获取相同的编码字符串?
Java/安卓代码:

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

nqwrtyyt1#

在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脚本:
文件名:test.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(‡=ñö
ezykj2lf

ezykj2lf2#

对我来说CP 1252不工作,因为它失败的非字母数字符号。我发现最好的字符集是ISO-8859-1,使用如下:

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

4si2a6ki3#

我用了这个:

private String decodeBase64(String encrypted) {
    byte[] encoded = new byte[0];
    try {
        encoded = Base64.getDecoder().decode(encrypted.getBytes("CP1252"));
        String str = new String(encoded, "CP1252");
        return str;
    } catch (UnsupportedEncodingException e) {

        e.printStackTrace();
    }
    return "";
}

相关问题