我的Scala代码从字节流中接收到一个二进制数据,它看起来像[61 62 63 64]。其内容是“abcd”。 我使用toString将其转换为字符串,但失败了。 如何将其打印为字符串?
我的Scala代码从字节流中接收到一个二进制数据,它看起来像[61 62 63 64]。其内容是“abcd”。 我使用toString将其转换为字符串,但失败了。 如何将其打印为字符串?
如果您知道字节数组的字符集,您可以将其转换为字符串。
val str = new String(bytes, StandardCharsets.UTF_8)
如果您未指定任何字符集,将使用默认的Charset
。
(bytes.map(_.toChar)).mkString
还是 new String(bytes)
?建议版本:想知道哪种更好,(bytes.map(_.toChar)).mkString
还是 new String(bytes)
? - BAEA
在两者中都表示为 65
),但大多数(也许全部?)其他字符都使用多个字节进行编码。简而言之,如果您的字符串只包含 ASCII 字符,则它们相同,否则将产生不同的结果。 - Micheal Hill您可以将字节数组转换为字符数组,然后从中构建字符串
scala> val bytes = Array[Byte]('a','b','c','d')
bytes: Array[Byte] = Array(97, 98, 99, 100)
scala> (bytes.map(_.toChar)).mkString
res10: String = abcd
scala>
val msg = Array[Byte](-17, -69, -65, 72, 101, 108, 108, 111)
(msg.map(_.toChar)).mkString
您将得到一个看起来非常奇怪的东西,而不是从new String(msg)
得到的期望的“Hello”。 - Murray Todd Williams def showBytes(bytes: Array[Byte]):String = {
bytes.map(b => "" + b.toInt).mkString(" ")
}
此函数将返回一个包含以空格分隔的数字值的字符串。
bytes.mkString(" ")
?2-这个答案不合适。它没有回答所问的问题。 - jwvh