JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal start byte 0x9e 解决方案

 在vivo设备上 调用

jstring str = env->NewStringUTF(charResult);

出现闪退问题报错:JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal start byte 0x9e

解决方案:

不使用NewStringUTF  从网上找了一个const char* 转jstring的函数 具体如下:


jstring str2jstring(JNIEnv *env, const char *pat) {

    //定义java String类 strClass
    jclass strClass = (env)->FindClass("java/lang/String");
    //获取String(byte[],String)的构造器,用于将本地byte[]数组转换为一个新String
    jmethodID ctorID = (env)->GetMethodID(strClass, "", "([BLjava/lang/String;)V");
    //建立byte数组
    jbyteArray bytes = (env)->NewByteArray(strlen(pat));
    //将char* 转换为byte数组
    (env)->SetByteArrayRegion(bytes, 0, strlen(pat), (jbyte*)pat);
    // 设置String, 保存语言类型,用于byte数组转换至String时的参数
    jstring encoding = (env)->NewStringUTF("utf-8");
    //将byte数组转换为java String,并输出
    return (jstring)(env)->NewObject(strClass, ctorID, bytes, encoding);
}

调用代码如下:

    const char *charResult = result.c_str();
    //jstring str = env->NewStringUTF(charResult); //此代码在vivo手机上出现闪退
    jstring str = str2jstring(env,charResult);

参考博客 转:JNI jstring与c++字符串类型转换函数

你可能感兴趣的:(问题记录,android,jni)