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

Posted

技术标签:

【中文标题】PHP/Java for Android 之间的数据编码/解码【英文标题】:Encoding/decoding of data between PHP/Java for Android 【发布时间】:2013-02-15 21:35:44 【问题描述】:

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

【问题讨论】:

encrypted.getBytes() 取决于语言环境编码。在您的情况下,很可能是 utf-8。在 php 中,它将取决于服务器,可能是固定大小的 8 位编码。你给你的base64编码器的字节是不同的。 @userSeven7s:PHP 的输出基于 CP1252,JAVA 的输出基于 UTF-8,我将在下面更新我的答案 【参考方案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 脚本:

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

【讨论】:

谢谢老兄.. 那是一个很大的帮助.. 欣赏它。 “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");【参考方案2】:

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

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

【讨论】:

以上是关于PHP/Java for Android 之间的数据编码/解码的主要内容,如果未能解决你的问题,请参考以下文章

vue与Android之间的数据传值

java输出1-100之间的数并求和for+while+do while实现

java输出1-100之间的数并求和for+while+do while实现

计算100~200之间不能被3整除的数,continue使用范例

VC;100到300之间不能被3整除的数

C# 练习 求出1~1000之间的所有能被7整除的数,并计算和输出每5个的和