问题 php / java for android之间的数据编码/解码


我必须解码从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="  

4810
2018-03-01 11:37


起源

encrypted.getBytes()取决于语言环境编码。在您的情况下最有可能是utf-8。在PHP中,它将取决于服务器,可能是固定大小的8位编码。您为base64编码器提供的字节不同。 - njzk2
@ userSeven7s:PHP的输出基于CP1252,JAVA的输出基于UTF-8,我将在下面更新我的答案 - Shehabic


答案:


在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脚本:

file: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(‡=ñö

12
2018-03-01 11:46



谢谢伙计..这是一个很大的帮助..欣赏它。 “CP1252”成功了。我是一个远离答案的谷歌搜索。 - Ronnie
我怎么解码这个 // This should give the same results as in PHP byte[] encoded = Base64.encode(encrypted.getBytes("CP1252"), Base64.DEFAULT); String str = new String(encoded, "CP1252"); - Anirban


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

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

0
2018-06-29 14:56