将字节数组转换为base64字符串java
正在尝试使用将将字节数组转换为base64字符串java,java,base64,apache-commons,Java,Base64,Apache Commons,正在尝试使用将字节[]转换为base64字符串 org.apache.commons.codec.binary.Base64。为此,我的java代码如下所示: base64String = Base64.encodeBase64URLSafeString(myByteArray); 但我看到生成的base64字符串中有一些无效字符 为什么我在生成的base64字符串中看到这些\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
字节[]
转换为base64字符串
org.apache.commons.codec.binary.Base64
。为此,我的java代码如下所示:
base64String = Base64.encodeBase64URLSafeString(myByteArray);
但我看到生成的base64
字符串中有一些无效字符
为什么我在生成的base64
字符串中看到这些\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?
它是有效字符串吗?
请注意,生成的字符串的长度可以除以四。这可能会有所帮助
sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();
encoder.encode(byteArray);
您(至少)有两种base64风格,最初的一种除了使用字母数字字符外还使用“+”和“/”,而“url安全”的一种使用“-”和“\”,这样内容就可以包含在url中(或者用作文件名,顺便说一句)
看起来您使用的是已转换为“url安全模式”的base64编码器
哦,“
是base64字母表的最后一个字符,看到“\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,就像看到“aaaaa”意味着有很多连续的零
如果您想确信这是正常情况,只需选择您最喜欢的十六进制转储程序/编辑器,并检查二进制输入的外观。通过以下过程,您可以将字节数组转换为Base64
// Convert a byte array to base64 string
byte[] bytearray= new byte[]{0x12, 0x23};
String s = new sun.misc.BASE64Encoder().encode(bytearray);
// Convert base64 string to a byte array
bytearray = new sun.misc.BASE64Decoder().decodeBuffer(s);
编辑:
请查看下面链接的指南您是否尝试使用encodebase64urlsafesting
方法而不是使用encodebase64urlsafesting
encodeBase64URLSafeString:
使用base64算法的URL安全变体对二进制数据进行编码
但不会将输出分块。url安全变体发出-和_
而不是+和/字符
encodeBase64String:
使用base64算法编码二进制数据,但不分块
输出。注意:我们将此方法的行为从多行更改为多行
分块(commons-codec-1.4)到单行非分块
(commons-codec-1.5)
来源:使用
String sCert = javax.xml.bind.DatatypeConverter.printBase64Binary(pk);
你试过解码你的输出吗?另外,您正在URL中使用编码的base64数据。仅当base64编码进入http/get或其他与url相关的操作时,才使用URLSafe版本。这可能有助于提供您拥有的代码written@developer:我用来转换字节[]
to string是我在问题中已经提供的一个methid…这是一个错误的建议--sun.misc
包层次结构不供公共使用。我不想使用sun.misc
`sun.misc.BASE64Decoder()??为什么我尝试使用ApacheCommonsSun.misc是Sun实现java/javax包的内部原因。不能保证它会一直存在(特别是在不同的JVM上),也不能保证它的接口在JVM的不同版本中保持不变,afaik。在所有的注释中,我都找到了一个有效的注释,我得到了/
,并用encodebase64urlsafesting
回复了econding方法以避免斜杠。。然后一切都从开始。。我只需要知道上面的是一个有效的base64字符串?请建议。您是在询问该字符串是否匹配[0-9A-Za-z_u-]+或[0-9A-Za-z/+]+?这听起来像是regexp的工作。