How to check if an array of bytes is a valid UTF-8 string in Kotlin

1 Answer

0 votes
import java.nio.ByteBuffer
import java.nio.charset.Charset
import java.nio.charset.CodingErrorAction

fun isValidUTF8(data: ByteArray): Boolean {
    val decoder = Charset.forName("UTF-8")
        .newDecoder()
        .onMalformedInput(CodingErrorAction.REPORT)
        .onUnmappableCharacter(CodingErrorAction.REPORT)

    return try {
        decoder.decode(ByteBuffer.wrap(data))
        true
    } catch (e: Exception) {
        false
    }
}

fun main() {
    val arr1 = "Hello, 世界".toByteArray(Charsets.UTF_8)
    val arr2 = byteArrayOf(0xa3.toByte(), 0xed.toByte(), 0xfd.toByte())

    println(if (isValidUTF8(arr1)) "true" else "false")
    println(if (isValidUTF8(arr2)) "true" else "false")
}

 
  
/*
run:
  
true
false

*/

 



answered Jul 8, 2025 by avibootz
...