我意识到这个问题可能是愚蠢的,但是嘿,粗糙的一天。无论如何,鉴于此:
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表示。
答案 0 :(得分:2)
UTF-8使用一到四个字节的无符号值。 你需要弄清楚当你像这样的值下溢时你实际获得的UTF-8值。
如果选中new String(alpha) == new String(gamma)
,您会看到它返回true。