zoukankan      html  css  js  c++  java
  • JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal start byte 0xfe

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

    在使用Jni的JNIEnv->NewStringUTF的时候抛出了异常"JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal start byte 0xfe "。网上搜索了一下,这个异常是由于Java虚拟机内部的dalvik/vm/CheckJni.c中的checkUtfString函数抛出的,并且JVM的这个接口明确是不支持四个字节的UTF8字符。因此需要在调用函数之前,对接口传入的字符串进行过滤,过滤函数如下:

    参考链接 android jni中 utf-8的check

    发布者

     

    默默

    默默码农

     

     

    #########################################################################################################

    newStringUTF出现input is not valid Modified UTF-8错误解决办法

    2013年10月12日 ⁄ 综合 ⁄ 共 883字 ⁄ 字号 ⁄ 评论关闭
     

    JNI调用newStringUTF时遇到不认识的字符串就直接出错退出~~,网上原因是dalvik/vm/CheckJni.c里面的checkUtfString函数检查通不过.找了半天没找到修正办法,把这个函数改了下,当做一个修正函数,下面是代码

    void correctUtfBytes(char* bytes) {
      char three = 0;
       while (*bytes != '') {
    	   unsigned char utf8 = *(bytes++);
    	   three = 0;
    	   // Switch on the high four bits.
    	   switch (utf8 >> 4) {
    	   case 0x00:
    	   case 0x01:
    	   case 0x02:
    	   case 0x03:
    	   case 0x04:
    	   case 0x05:
    	   case 0x06:
    	   case 0x07:
    		   // Bit pattern 0xxx. No need for any extra bytes.
    		   break;
    	   case 0x08:
    	   case 0x09:
    	   case 0x0a:
    	   case 0x0b:
    	   case 0x0f:
    		   /*
    			* Bit pattern 10xx or 1111, which are illegal start bytes.
    			* Note: 1111 is valid for normal UTF-8, but not the
    			* modified UTF-8 used here.
    			*/
    		   *(bytes-1) = '?';
    		   break;
    	   case 0x0e:
    		   // Bit pattern 1110, so there are two additional bytes.
    		   utf8 = *(bytes++);
    		   if ((utf8 & 0xc0) != 0x80) {
    			   --bytes;
    			   *(bytes-1) = '?';
    			   break;
    		   }
    		   three = 1;
    		   // Fall through to take care of the final byte.
    	   case 0x0c:
    	   case 0x0d:
    		   // Bit pattern 110x, so there is one additional byte.
    		   utf8 = *(bytes++);
    		   if ((utf8 & 0xc0) != 0x80) {
    			   --bytes;
    			   if(three)--bytes;
    			   *(bytes-1)='?';
    		   }
    		   break;
    	   }
       }
    }

    http://www.xuebuyuan.com/1240531.html
    http://www.mobibrw.com/2016/2859
  • 相关阅读:
    CSUOJ 1525 Algebraic Teamwork
    CSUOJ 1531 Jewelry Exhibition
    CSUOJ 1532 JuQueen
    POJ 2195 Going Home
    hiho week 37 P1 : 二分·二分查找之k小数
    POJ 2186 Popular Cows
    ZOJ 2532 Internship
    RQNOJ PID496/[IOI1999]花店橱窗布置
    POJ 3026 Borg Maze
    laravel框架总结(五) -- 服务提供者(提及契约Contracts)
  • 原文地址:https://www.cnblogs.com/pengmn/p/9183612.html
Copyright © 2011-2022 走看看