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
*/