尝试使用将byte[]
转换为base64字符串
org.apache.commons.codec.binary.Base64
..为此,我的java代码如下:
base64String = Base64.encodeBase64URLSafeString(myByteArray);
但我看到的是生成的base64
字符串中的一些无效字符..
为什么我在生成的____
字符串中看到这些base64
行?
它是一个有效的字符串吗?
请注意,生成的字符串的长度可以分为四个。
答案 0 :(得分:2)
您是否尝试使用encodeBase64String
方法而不是encodeBase64URLSafeString
?
encodeBase64URLSafeString:
使用base64算法的URL安全变体对二进制数据进行编码 但不会产生结果。 url-safe变体发出 - 和_ 而不是+和/字符。
encodeBase64String:
使用base64算法对二进制数据进行编码,但不会对其进行分块 输出。注意:我们从多行更改了此方法的行为 分块(commons-codec-1.4)到单行非分块 (公地编解码器1.5)。
答案 1 :(得分:1)
这可能会有所帮助
sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();
encoder.encode(byteArray);
答案 2 :(得分:1)
使用
String sCert = javax.xml.bind.DatatypeConverter.printBase64Binary(pk);
答案 3 :(得分:0)
你有(至少)两种口味的base64,原来的一个使用'+'和'/'以及字母数字字符,而“url safe”使用“ - ”和“_”所以内容可以包含在URL中(或用作文件名,顺便说一句)。
看起来您正在使用已经变为“网址安全模式”的base64编码器。
apache's javadoc for URLSafeString()
哦,'_'
是base64字母表的最后一个字符,看到"____"
的字符串意味着你一直在编码0xffffff的块......就像看到“AAAAAA”意味着有一个很多连续的零。
如果您想确信这是正常情况,只需选择您喜欢的十六进制转储器/编辑器并检查您的二进制输入是什么样的。
答案 4 :(得分:-1)
通过以下过程,您可以将字节数组转换为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);
修改强> 的
请查看以下链接commons apache
中的指南