【问题标题】:Java SE 8 Base64 class: encoding of byte[] parameterJava SE 8 Base64 类:byte[] 参数的编码
【发布时间】:2015-04-10 21:17:40
【问题描述】:

背景:我正在使用 Java 1.8 中新增的 java.util.Base64 类。

在文档中,它指定 encodeToString 采用字节数组(还有一些其他选项,但 byte[] 是我正在使用的)。但是,文档没有指定字节数组需要如何编码。这是我的功能代码:

import java.util.Base64;
import java.util.Base64.Encoder;
public class Test64 {
    public static void main(String[] args){
        try{
            System.out.println(print64("This should be base64"));
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public static String print64(String test) throws Exception {
        String test64 = "";
        byte[] testBytes = test.getBytes("US-ASCII");
        Base64.Encoder encoder64 = Base64.getUrlEncoder();
        test64 = encoder64.encodeToString(testBytes);
        return test64;
    }
}

我的问题是 Base64 encodeToString 是否会接受任何编码的 byte[]。我已经尝试过 US-ASCII 和 UTF-8,它们都可以工作,但我希望得到一个一般性的结论。

Link to Javadoc for Base64.Encoder

【问题讨论】:

  • Base64 是 any 字节和可读 ASCII 字符之间的 general 转换。编码无关紧要。
  • 请记住,base64 也用于对图像、声音文件等进行编码——它甚至不将其输入视为任何形式的“编码字符串”。
  • 如果您已经有一个字符串(文本),那么您不需要 base 64。使用 base 64 的原因是将任何二进制编码为字符串。有时你会看到 base 64 编码为字节;在这种情况下,假定为 US ASCII(或兼容的,例如拉丁语或 UTF-8)。原因可能是 Java char 占用 2 个字节而不是 1 个字节,所以这样更有效。
  • @Maarten-Bodewes,我实际上需要对其进行编码,因为我正在测试为基于客户端 ID 和密钥的 API 创建访问密钥。
  • @RealSkeptic 这是一些我以前不知道的附加信息,我会记住的。

标签: java encoding base64 java-8


【解决方案1】:

文档没有指定编码,因此任何byte[] 数据都可以使用。 Base64 转换是数字的,而不是面向字符的,所以无论谁解释 Base64 数字都必须知道它的含义。因此,只要您的 文档清楚如何解释字节,您就可以使用 Base64 字符串进行任何数据序列化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    相关资源
    最近更新 更多