您的位置:首页 > 移动开发

JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal continuation byte 0x12

2017-01-07 14:30 2071 查看
正在学习JNI开发,当使用JNI传参时,发现,会抛出input is not valid Modified UTF-8: illegal continuation byte 0x12的异常,根据异常内容,我们可以猜得出个大概,是因为我们传入的数据不是UTF-8的或者是说,我们在c文件里面返回数据的时候,数据格式被强制指定为UTF-8格式的。



那我们怎么解决这个问题呢?

想要解决这个问题,那我们就得把jstring转化成c/c++字符串。在Java JNI里面有提供这样的转换方法,调用GetStringUTFChars就可以转换成功了,当然在调用之后,需要去检查返回的字符串是否为空,因为调用该函数有内存分配操作,失败后,该函数返回NULL,并且抛出OutOfMemoryError异常。调用ReleaseStringUTFChars可以释放GetStringUTFChars中分配的内存。

转换原理讲完了,那么久看看转换过程代码吧。

char buf[126];
const jbyte *str;
str=(*env)->GetStringUTFChars(env,jstr,NULL);
if(str==NULL){
return NULL;
}
(*env)->ReleaseStringUTFChars(env,jstr,str);


OK了,试试吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐