You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 18:19:50