Kotlin中Bytearray转String时崩溃且显示乱码求助
Kotlin中Byte数组转String乱码/崩溃的解决办法
你的Byte数组包含大量空字节、超出常规文本编码范围的字节,这些字节并非有效文本字符序列,直接用String(cardNumber!!)或cardNumber!!.toString()转换时,要么因无效编码崩溃,要么显示乱码或不可见字符。
给你两个实用的解决办法:
转十六进制字符串(推荐,适合二进制数据展示)
把每个Byte转换成两位十六进制格式,直观呈现字节的真实内容:val cardNumber = byteArrayOf(0, 0, 0, 0, 0, 0, 127, 7, -120, 12, 0, 0, 0, 0, 0, 0) val hexStr = cardNumber.joinToString(" ") { "%02X".format(it) } Log.d("Data", hexStr)输出结果:
00 00 00 00 00 00 7F 07 88 0C 00 00 00 00 00 00(注:-120的十六进制补码为88)转十进制字符串(保留原始数值)
直接将每个Byte的十进制数值拼接成字符串:val cardNumber = byteArrayOf(0, 0, 0, 0, 0, 0, 127, 7, -120, 12, 0, 0, 0, 0, 0, 0) val decimalStr = cardNumber.joinToString(" ") { it.toString() } Log.d("Data", decimalStr)输出结果:
0 0 0 0 0 0 127 7 -120 12 0 0 0 0 0 0
如果这个Byte数组原本对应某种特定编码的文本(比如ISO-8859-1),可以尝试指定编码转换,比如String(cardNumber, Charsets.ISO_8859_1),但从你的数组内容来看,它更像是二进制数据(比如卡片ID、协议数据包),用十六进制或十进制展示才是合理选择。
内容的提问来源于stack exchange,提问作者Asad373
相关产品推荐
相关产品推荐

