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> 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 表示。

最佳答案

UTF-8 使用一到四字节的无符号值。 当你下溢这样的值时,你必须弄清楚你实际得到的 UTF-8 值是什么。

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

关于scala - 将字节数组转换为字符串并再次转换回来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43725596/

相关文章:

scala - 如何调试akka关联进程?

c++ - Scala 可变数量的参数是 F-Bounded 类型的子类

scala - 带字符串内部类型的值类?

scala - (如何)你能 curry 组成一元函数吗?

scala - Scala 中的 `def` 与 `val` 与 `lazy val` 评估

scala - 包和项目的命名约定

scala - 我如何在 Maven 中使用 spark-testing-base?

arrays - 以循环方式移动序列的最佳实践

scala - 带有 var Enum 成员的 case 类,退出作用域后不保存值

scala - Scala中的家庭多态性