问题:解码Fz+=,然后重新编码会得到Fz8=。
以下是代码:
给出以下字符串: Fz8= 加号如何变成8?
我一定漏掉了什么。
Fz+= 的位模式为:000101 110011 111110 000000
重新排列成8位组:00010111 00111111 10000000
换算成十进制:23 63 128
这需要3个字节来表示。
然而,当我尝试运行以下代码时:
最后一个字节(1000 0000)去哪了?这就是将其编码时+变成8的原因。
以下是代码:
new String(Base64.getEncoder().encode(Base64.getDecoder().decode("Fz+=".getBytes("UTF-8"))))
给出以下字符串: Fz8= 加号如何变成8?
我一定漏掉了什么。
Fz+= 的位模式为:000101 110011 111110 000000
重新排列成8位组:00010111 00111111 10000000
换算成十进制:23 63 128
这需要3个字节来表示。
然而,当我尝试运行以下代码时:
Base64.getDecoder().decode("Fz+=".getBytes("UTF-8"))
我得到了以下十进制数组:
[23, 63]
最后一个字节(1000 0000)去哪了?这就是将其编码时+变成8的原因。
UTF-8
转换导致的往返数据丢失?不是完全确定,但这篇文章可能会有所帮助。看起来与如何将128
扩展为多个字节有关。 - ztaylor54