加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

javax.xml.bind的Base64编码器/解码器吃掉字符串的最后两个字符

发布时间:2020-12-15 05:19:42 所属栏目:Java 来源:网络整理
导读:我需要使用Base64编码转换一些字符串,并且很高兴看到我不必滚动我自己的转换器 – Java提供了一个javax.xml.bind.DataConverter.但是,它有一些问题.这是我使用Jython REPL的时间输出: import javax.xml.bind.DatatypeConverter as DC import java.lang.Stri
我需要使用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'

正如您所看到的,它根本不处理非字母数字字符,并且经常 – 但不总是 – 将字符串截断两个字符.

我想这可能是时候编写我自己的类了,但是现在我很烦恼a)我没有阅读javadoc或其他东西b)该类没有按预期工作.

所以任何帮助都非常感谢;提前致谢.

解决方法

hello不是base64字符串,因此解析失败.您必须将字符串转换为字节数组(尝试String(text).getBytes(‘UTF-8’)),然后在字节数组上调用DC.printBase64Binary()以获取Base64中的数据.

然后DC.parseBase64Binary()将此Base64编码数据转换回字节数组(然后您可以将其转换回字符串).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读