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 之间的数据编码/解码的主要内容,如果未能解决你的问题,请参考以下文章
java输出1-100之间的数并求和for+while+do while实现
java输出1-100之间的数并求和for+while+do while实现