JNI JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8:xxxx异常
今天android上Jni返回jstring给java层,概率性的出现上述异常,网上看过解决方案,说修改jvm的什么代码,其实我们做应用层的哪有改这个的能力根本不现实的,后面继续查找最后自己解决的。
网上说的解决方案,链接如下:JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal start byte 0xfe - a318013800 - 博客园JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal start byte 0xfe 在使用Jnihttps://www.cnblogs.com/pengmn/p/9183612.html
我提供的解决办法:
一、将jstring 改成 jbyteArray 也就是java层的byte[] 到java层再转成String
二、jni层直接将char* 转换成base64编码的字符串然后返回也能解决,jni转base64的代码如下。
以上两种方法都可以根据自己的喜好选择,可以规避上述异常。
typedef unsigned char uint8;
typedef unsigned long uint32;static uint8 alphabet_map[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
static uint8 reverse_map[] ={255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63,52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, 255, 255, 255, 255,255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255,255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 255, 255, 255, 255, 255};uint32 base64_encode(const uint8 *text, uint32 text_len, uint8 *encode)
{uint32 i, j;for (i = 0, j = 0; i+3 <= text_len; i+=3){encode[j++] = alphabet_map[text[i]>>2]; //取出第一个字符的前6位并找出对应的结果字符encode[j++] = alphabet_map[((text[i]<<4)&0x30)|(text[i+1]>>4)]; //将第一个字符的后2位与第二个字符的前4位进行组合并找到对应的结果字符encode[j++] = alphabet_map[((text[i+1]<<2)&0x3c)|(text[i+2]>>6)]; //将第二个字符的后4位与第三个字符的前2位组合并找出对应的结果字符encode[j++] = alphabet_map[text[i+2]&0x3f]; //取出第三个字符的后6位并找出结果字符}if (i < text_len){uint32 tail = text_len - i;if (tail == 1){encode[j++] = alphabet_map[text[i]>>2];encode[j++] = alphabet_map[(text[i]<<4)&0x30];encode[j++] = '=';encode[j++] = '=';}else //tail==2{encode[j++] = alphabet_map[text[i]>>2];encode[j++] = alphabet_map[((text[i]<<4)&0x30)|(text[i+1]>>4)];encode[j++] = alphabet_map[(text[i+1]<<2)&0x3c];encode[j++] = '=';}}return j;
}uint32 base64_decode(const uint8 *code, uint32 code_len, uint8 *plain)
{assert((code_len&0x03) == 0); //如果它的条件返回错误,则终止程序执行。4的倍数。uint32 i, j = 0;uint8 quad[4];for (i = 0; i < code_len; i+=4){for (uint32 k = 0; k < 4; k++){quad[k] = reverse_map[code[i+k]];//分组,每组四个分别依次转换为base64表内的十进制数}assert(quad[0]<64 && quad[1]<64);plain[j++] = (quad[0]<<2)|(quad[1]>>4); //取出第一个字符对应base64表的十进制数的前6位与第二个字符对应base64表的十进制数的前2位进行组合if (quad[2] >= 64)break;else if (quad[3] >= 64){plain[j++] = (quad[1]<<4)|(quad[2]>>2); //取出第二个字符对应base64表的十进制数的后4位与第三个字符对应base64表的十进制数的前4位进行组合break;}else{plain[j++] = (quad[1]<<4)|(quad[2]>>2);plain[j++] = (quad[2]<<6)|quad[3];//取出第三个字符对应base64表的十进制数的后2位与第4个字符进行组合}}return j;
}
参考了下面的这个文章:
C++实现base64编解码 - Weisswire - 博客园C++实现base64编解码https://www.cnblogs.com/Severus-Cavendish/p/11623240.html
JNI JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8:xxxx异常相关推荐
- 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 APPLICATI ...
- Android之JNI DETECTED ERROR IN APPLICATION: illegal class name ‘XXX‘的错误解决方法
1.问题 JNI DETECTED ERROR IN APPLICATION: illegal class name 'com.example.chenyu.test.JniClient' 2.原因 ...
- JNI DETECTED ERROR IN APPLICATION: jarray was NULL
项目中用到了opengles去展示三维点云数据,个人比较生疏,所以打算学一学.根据官方的示例先画了一个三角形,后面在画方形的时候怎么都不成功,报错:JNI DETECTED ERROR IN APPL ...
- ByteBuffer.allocate()/ByteBuffer.allocateDirect()/JNI DETECTED ERROR IN APPLICATION: jarray was NULL
在Java中当我们要对数据进行更底层的操作时,一般是操作数据的字节(byte)形式,这时经常会用到ByteBuffer这样一个类.ByteBuffer提供了两种静态实例方式: public stati ...
- android jni黑屏,android使用高德地图出现诡异的:JNI DETECTED ERROR IN APPLICATION
今天用 android studio 写程序踩到这个诡异的坑: 首先介绍使用的开发工具和环境:android studio 测试机型:红米note2: android 5.0.2 是这样的:笔者程序中 ...
- JNI DETECTED ERROR IN APPLICATION: can't call void com.example.wxy.ndks.Utils.fun3() on instance of
//cmake使用 JNIEXPORT void JNICALL Java_com_example_wxy_ndks_Utils_funs2(JNIEnv *env, jobject instance ...
- [USF-XSim-62] ‘elaborate‘ step failed with errors.[Vivado 12-4473] Detected error while running sim
[USF-XSim-62] 'elaborate' step failed with error(s). Please check the Tcl console output .and [Vivad ...
- 【.net部署】Server Error in ‘/‘ Application.错误解决方案
[.net部署]Server Error in '/' Application.错误解决方案 参考文章: (1)[.net部署]Server Error in '/' Application.错误解决 ...
- OpenCV Error: Sizes of input arguments do not match (The operation is neither 'array op array' (wher
OpenCV Error: Sizes of input arguments do not match (The operation is neither 'array op array' (wher ...
最新文章
- Log4j2又爆雷!2.16.0存在DOS攻击风险,升级到2.17.0可解决!
- Unity3D Image 组件附入图片问题
- 网关和路由器的区别是什么?
- es6 var、let、const命令
- 百度编辑器ueditor自适应手机端
- 《指针的编程艺术(第二版)》一3.8 改错题
- nginx重启无法找到PId的解决办法
- match_parent和fill_parent有什么区别?
- Python2.x vs Python3
- 3.工作组环境下的应用
- 安卓使用MediaPlayer播放RTSP无画面的解决办法
- [文档].Altera - Nios II Flash Programmer用户指南
- 计算机大学生职业规划书word模板,大学生职业生涯规划书模板(附word)
- html手写笔记照片,Myscript Nebo – 好用到哭的手写笔记软件!你只管写画,它帮你识别转换成文字 | 火星博客...
- prototype鼠标指针_html5鼠标点击页面光标圆点动画特效
- C#开发金蝶K3插件
- 链路追踪google dapper论文 中文
- 实验吧-CTF-web-头有点大貌似有点难看起来有点难(学习笔记)
- xShell6远端登录Linux登录错误Connecting to 192.168.112.128:22... Could not connect to ‘192.168.112.128‘ (p
- python写完后打不开门_你的解锁方式为什么打不开门?