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

16 進コードの 3 バイトです。80 00 80

于 2015-05-11T10:22:13.260 に答える
0

まず最初に、使用するコードはコンパイルされるべきではありません。 の後に終了引用符がありません"UTF-8

ええ、フォーマットが進むにつれて"gACA"有効なbase64文字列ですが、意味のある UTF-8 テキストにデコードされません。間違ったエンコーディングを使用しているか、何らかの形で文字列を台無しにしていると思います...

于 2015-05-11T10:17:43.840 に答える
0

RFC 4648 では、2 つのアルファベットが定義されています。

  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 に答える