将字节数组转换为字符串并再次转换为字节数组

3

我知道这个问题可能很愚蠢,但是今天过得很糟糕。无论如何,考虑到这个:

scala> import java.nio.charset.Charset
import java.nio.charset.Charset

scala> val alpha = Array[Byte](2,-9,-7,-126,-36,-41,-16,56)
alpha: Array[Byte] = Array(2, -9, -7, -126, -36, -41, -16, 56)

scala> val beta = new String(alpha, Charset.forName("UTF-8"))
beta: String = ?������8

scala> val gamma = beta.getBytes(Charset.forName("UTF-8"))
gamma: Array[Byte] = Array(2, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, 56)

为什么 alpha == gamma 不成立?正确的做法是什么?
更新:我发现Base64编码/解码可以工作。但我仍然想知道为什么UTF-8不行。可能是因为这些字节中没有一个或多个的UTF-8表示形式。
1个回答

2

UTF-8使用1到4个字节的无符号值。

当下溢这些值时,您需要确定实际获取的UTF-8值。

如果您检查new String(alpha) == new String(gamma),您会发现它返回true。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接