Java 8中基本和url base64编码之间的区别

vin*_*tec 7 java base64 uri java-8

Java 8 Base64库有两个可用于构建URI的变体:"Basic"和"URL和文件名安全".文档指向RFC 4648表2作为差异的解释.

在阅读规范之后,我仍然不清楚两种编码之间的实际差异:两种标准都得到"广泛"支持吗?具体的浏览器呢?是否建议对数据URI编码使用URL和文件名安全编码?是否存在已知的支持限制?

Eug*_*ene 16

最简单的方法是提供一个例子(恕我直言):

    Base64.Encoder enc = Base64.getEncoder();
    Base64.Encoder encURL = Base64.getUrlEncoder();

    byte[] bytes = enc.encode("subjects?_d".getBytes());
    byte[] bytesURL = encURL.encode("subjects?_d".getBytes());

    System.out.println(new String(bytes)); // c3ViamVjdHM/X2Q=      notice the "/"
    System.out.println(new String(bytesURL)); // c3ViamVjdHM_X2Q=   notice the "_"

    Base64.Decoder dec = Base64.getDecoder();
    Base64.Decoder decURL = Base64.getUrlDecoder();

    byte[] decodedURL = decURL.decode(bytesURL);
    byte[] decoded = dec.decode(bytes);

    System.out.println(new String(decodedURL));
    System.out.println(new String(decoded));
Run Code Online (Sandbox Code Playgroud)

注意一个是哪个URL safe,另一个不是.

事实上,如果你看一下实现,有两个用于编码的查找表:toBase64toBase64URL.只有两个字符不同:

+/对于toBase64-_toBase64URL.

所以看来你的问题是一个安全的URI,应该在那里使用?; 答案是肯定的.