tsm*_*tsm 3 java base64 encoding decoding
我需要使用Base64编码转换一些字符串,并且很高兴看到我不必滚动我自己的转换器 - Java提供了一个javax.xml.bind.DataConverter.但是,它有一些问题.这是我使用Jython REPL的时间输出:
>>> import javax.xml.bind.DatatypeConverter as DC
>>> import java.lang.String as String
>>> def foo(text):
... return DC.printBase64Binary(DC.parseBase64Binary(String(text)))
...
>>> foo("hello")
'hell'
>>> foo("This, it's a punctuated sentence.")
'Thisitsapunctuatedsenten'
>>> foo("\"foo\" \"bar\"")
'foob'
>>> foo("\"foo\" \"bar\"12")
'foobar12'
>>> foo("\"foo\" \"bar\"1")
'foob'
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它根本不处理非字母数字字符,并且经常 - 但不总是 - 将字符串截断两个字符.
我想这可能是时候编写我自己的类了,但是现在我很烦恼a)我没有读取javadoc或其他东西b)该类没有按预期工作.
所以任何帮助都非常感谢; 提前致谢.
Aar*_*lla 12
hello不是base64字符串,因此解析失败.您必须将字符串转换为字节数组(尝试String(text).getBytes('UTF-8')),然后调用DC.printBase64Binary()字节数组以获取Base64中的数据.
DC.parseBase64Binary() 然后将此Base64编码数据转换回字节数组(然后您可以将其转换回字符串).
花了一些时间解决GAE平台上的类似问题后的一些发现(Base64解码器在从facebook解码base64-string时吃掉最后两个字符)
如果编码的字符串长度不是4*n,则该方法DatatypeConverter.parseBase64Binary可能会删除一些尾随字符(使JSON有效负载在语法上错误).我的解决方案是添加以下代码:
while (payload.length() % 4 != 0) payload += "=";
Run Code Online (Sandbox Code Playgroud)
关于问题中的代码示例,我建议更改测试字符串首先被编码然后解码,即:
return DC.parseBase64Binary(DC.printBase64Binary(String(text).getBytes()))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20127 次 |
| 最近记录: |