4

使用 base64 在 PHP 中编码的字符串“gACA”。现在我正在尝试使用base64在java中解码。但解码后得到荒谬的价值。我试过这样:

public class DecodeString{
{
      public static void main(String args[]){
      String strEncode = "gACA";   //gACA is encoded string in PHP
      byte byteEncode[] = com.sun.org.apache.xerces.internal.impl.dv.util.Base64.decode(strEncode );
      System.out.println("Decoded String" + new String(k, "UTF-8"));
      }
 }

输出: ??

请帮帮我

4

5 回答 5

2

Java 内置 Base64 编码器-解码器,无需额外的库来解码:

byte[] data = javax.xml.bind.DatatypeConverter.parseBase64Binary("gACA");
for (byte b : data)
    System.out.printf("%02x ", b);

输出:

80 00 80

它是 3 个字节,带有十六进制代码:80 00 80

于 2015-05-11T10:22:13.260 回答
1

试试这个,对我来说效果很好(但是我正在解码文件):

Base64.decodeBase64(IOUtils.toByteArray(strEncode));

所以它看起来像这样:

public class DecodeString{
{
  public static void main(String args[]){
  String strEncode = "gACA";   //gACA is encoded string in PHP
  byte[] byteEncode = Base64.decodeBase64(IOUtils.toByteArray(strEncode));
  System.out.println("Decoded String" + new String(k, "UTF-8));
  }
}

请注意,您将需要额外的库:

于 2015-05-11T10:14:22.487 回答
1
public static void main(String args[])  {

        String strEncode = "gACA";   //gACA is encoded string in PHP
        byte byteEncode[] = Base64.decode(strEncode);

        String result = new String(byteEncode, "UTF-8");
        char[] resultChar = result.toCharArray();
        for(int i =0; i < resultChar.length; i++)
        {
            System.out.println((int)resultChar[i]);
        }
        System.out.println("Decoded String: " + result);
    }

我怀疑这是一个编码问题。关于 65533 的问题 - 在阅读这篇文章的 C# 文本文件中建议第一个和最后一个字符是 \“。中间有一个字符 0。您的结果可能是“”或“0”,但编码错误。

于 2015-05-11T10:28:50.433 回答
0

首先,您使用的代码不应该编译,它在"UTF-8.

是的,按照格式,它"gACA"是一个有效的base64字符串,但它不会解码为任何有意义的 UTF-8 文本。我想你使用了错误的编码,或者以某种方式弄乱了字符串......

于 2015-05-11T10:17:43.840 回答
0

RFC 4648 定义了两个字母表。

  1. PHP 使用Base 64 编码
  2. Java 使用带有 URL 和文件名安全字母的 Base 64 编码

它们非常接近,但并不完全相同。在 PHP 中:

const REPLACE_PAIRS = [
  '-' => '+',
  '_' => '/'
];
public static function base64FromUrlSafeToPHP($base64_url_encoded) {
  return strtr($base64_url_encoded, self::REPLACE_PAIRS);
}

public static function base64FromPHPToUrlSafe($base64_encoded) {
  return strtr($base64_encoded, array_flip(self::REPLACE_PAIRS));
}
于 2021-09-20T02:49:32.667 回答