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

Scala 将字节数组转换为字符串并再次转换,scala,Scala,我意识到这个问题可能很愚蠢,但嘿,今天真是糟糕。无论如何,考虑到这一点: 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> v

我意识到这个问题可能很愚蠢,但嘿,今天真是糟糕。无论如何,考虑到这一点:

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)
为什么α=gamma不?正确的方法是什么


更新:我看到Base64编码/解码工作正常。但我仍然对UTF-8为什么不感兴趣。可能是因为一个或多个字节没有UTF-8表示。

UTF-8使用一到四个字节的无符号值。 你必须弄清楚,当你像这样低估这些值时,你实际上得到了什么UTF-8值

如果您选中
新字符串(alpha)==新字符串(gamma)
,您将看到它返回true