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 会将您的字符串编码为十六进制代码,第二个是普通字符串

于 2012-07-06T10:27:14.280 回答
2

来自以下 API 文档Base64.encodeBase64()

byte[] 在其 UTF-8 表示中包含 Base64 字符。

所以与其

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 回答