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

Android 2.1(API 7)中String转byte数组遇NoSuchMethodError如何解决?

Android API 7 下 String 转 ByteArray 的替代方案

问题场景

在 API 7 环境中执行以下 Kotlin 代码:

val string = "string"
val bytes = string.toByteArray(Charset.forName("UTF-8"))

抛出异常:

java.lang.NoSuchMethodError: java.lang.String.getBytes

由于 String 转 byte 数组的标准方法从 API 8 才开始支持,需寻求不依赖该标准方法的转换方式。

可行解决方案

方案1:借助流实现 UTF-8 编码转换(推荐)

通过 ByteArrayOutputStream 和 OutputStreamWriter 手动完成编码,完全兼容 API 7:

fun String.toUtf8BytesApi7(): ByteArray {
    val outputStream = ByteArrayOutputStream()
    val writer = OutputStreamWriter(outputStream, "UTF-8")
    writer.write(this)
    writer.flush()
    return outputStream.toByteArray()
}

// 使用示例
val string = "string"
val bytes = string.toUtf8BytesApi7()

方案2:调用 API 7 支持的无参 getBytes() 方法

注意:此方法使用系统默认编码,可能不是 UTF-8,仅在不要求固定编码时使用:

val bytes = string.getBytes()

方案3:通过 CharsetEncoder 实现编码转换

严格指定 UTF-8 编码的另一种实现方式:

fun String.toUtf8BytesWithEncoder(): ByteArray {
    val charset = Charset.forName("UTF-8")
    val encoder = charset.newEncoder()
    val charBuffer = CharBuffer.wrap(this)
    val byteBuffer = encoder.encode(charBuffer)
    return byteBuffer.array().copyOfRange(0, byteBuffer.limit())
}

内容的提问来源于stack exchange,提问作者Сергей Кириллов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 17:25:21