我已经尝试了一段时间,但无论我做什么,我似乎都无法让我的字符串成为 Url 安全的:
Input: XwPp9xazJ0ku5CZnlmgAx2Dld8SHkAeT+d7yvxw=
Desired Output: XwPp9xazJ0ku5CZnlmgAx2Dld8SHkAeT-d7yvxw
本质上,我想在来自 https://developer.android.com/reference/android/util/Base64.html 的输入字符串上应用一些标志,即 Base64.URL_SAFE
、Base64.NO_PADDING
和 Base64.NO_WRAP
。但是当我这样做时:
String str = "XzbeW3jg9NYp6J0w2mTP4NLrTK06p1EDTnNG+KYhvyw=";
byte[] encoded = Base64.encode(
str.getBytes(), Base64.URL_SAFE | Base64.NO_PADDING | Base64.NO_WRAP);
byte[] strBytes = Base64.decode(encoded, Base64.URL_SAFE | Base64.NO_PADDING | Base64.NO_WRAP);
String decoded = new String(strBytes);
//outputs original str "XzbeW3jg9NYp6J0w2mTP4NLrTK06p1EDTnNG+KYhvyw="
System.out.println(decoded);
我不确定为什么 url 安全编码在这里不起作用,是不是我做错了什么?有没有办法获得我想要的输出(除了手动执行 String.replace()
和其他字符串修改?
最佳答案
感谢大家的评论!没错,我已经有了一个 base64 编码的字符串,我需要先解码然后重新编码。
byte[] strBytes = Base64.decode(str, Base64.DEFAULT);
byte[] encoded = Base64.encode(
strBytes, Base64.URL_SAFE | Base64.NO_PADDING | Base64.NO_WRAP);
return new String(encoded);
是最终为我工作的解决方案。
关于java - 如何使 String Base64 Url 安全 Java/Android?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47123876/