0

私のコード:

private static String convertToBase64(String string)
{
    final byte[] encodeBase64 =
            org.apache.commons.codec.binary.Base64.encodeBase64(string
                    .getBytes());
    System.out.println(Hex.encodeHexString(encodeBase64));

    final byte[] data = string.getBytes();
    final String encoded =
            javax.xml.bind.DatatypeConverter.printBase64Binary(data);
    System.out.println(encoded);

    return encoded;
}

今、私はそれを呼び出しています:convertToBase64("stackoverflow");そして、次の結果を取得します:

6333526859327476646d56795a6d787664773d3d
c3RhY2tvdmVyZmxvdw==

異なる結果が得られるのはなぜですか?

4

2 に答える 2

2

Hex.encodeHexString は文字列を 16 進数にエンコードすると思います。2 つ目は通常の文字列です。

于 2012-07-06T10:27:14.280 に答える
2

の API ドキュメントからBase64.encodeBase64():

UTF-8 表現の Base64 文字を含む byte[]。

だから代わりに

System.out.println(Hex.encodeHexString(encodeBase64));

あなたは書くべきです

System.out.println(new String(encodeBase64, "UTF-8"));

ところで:String.getBytes()結果はデフォルトのプラットフォーム エンコーディングに依存するため、明示的なエンコーディングなしでバージョンを使用しないでください (Windows の場合、これは通常 "Cp1252" および Linux の "UTF-8" です)。

于 2012-07-06T10:38:52.157 に答える