Java 8中基本和url base64编码之间的差异

Java 8中基本和url base64编码之间的差异,java,java-8,base64,uri,Java,Java 8,Base64,Uri,Java8库有两个可用于URI构建的变体:“基本”变体和“URL和文件名安全”变体。文件中提到表2作为差异的解释 在阅读了规范之后,我仍然不清楚这两种编码之间的实际区别是什么:这两种标准都“广泛”支持吗?具体来说浏览器呢?对于数据URI编码,是否建议使用URL和文件名安全编码?是否存在已知的支持限制?最简单的方法是提供一个示例(IMHO): 请注意,一个是URL安全的,另一个不是 事实上,如果您查看实现,有两个用于编码的查找表:toBase64和toBase64URL。只有两个字符不同: +和/

Java8库有两个可用于URI构建的变体:“基本”变体和“URL和文件名安全”变体。文件中提到表2作为差异的解释


在阅读了规范之后,我仍然不清楚这两种编码之间的实际区别是什么:这两种标准都“广泛”支持吗?具体来说浏览器呢?对于数据URI编码,是否建议使用URL和文件名安全编码?是否存在已知的支持限制?

最简单的方法是提供一个示例(IMHO):

请注意,一个是
URL安全的
,另一个不是

事实上,如果您查看实现,有两个用于编码的查找表:
toBase64
toBase64URL
。只有两个字符不同:

+
/
适用于
toBase64
-
适用于
toBase64URL


因此,您的问题似乎是一个安全的URI,应该在那里使用?;答案是肯定的

运行一些测试,使用base64“URL和文件名安全”编码数据URI,会产生Chrome无法识别的URI


示例:
数据:文本/普通;base64,TG9yZW0/aXBzdW0=
正确解码为
Lorem?ipsum
,而其URL安全对应物
数据:text/plain;base64,TG9yZW0\u aXBzdW0=
不是(ERR\u INVALID\u URL)。

那么假设主要浏览器实现URL安全标准?例如,MDN文档没有指定这一点。@vinntec我真的不能说。。。但从实现来看,我会这么认为。实际上,当放入数据URI时,Chrome无法解释URL安全的,但可以解释基本的。@Eugene这是否意味着我可以使用Base64编码器进行编码,然后用-和/和替换+然后字符串将与Base64 URL编码器的输出相同?提前谢谢!
    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));