我用c调用java,在一个线程里面用 char* 转成 jstring
char *userName;
jstring jstr_userName = NULL;
jstr_userName =(*jniEnv)->NewStringUTF(jniEnv, userName);
奇怪的是userName是英文的时候,一起正常,但换成中文的时候,就程序崩溃,是怎么回事呢?下面是提示
02-05 08:17:22.472: W/dalvikvm(1892): JNI WARNING: illegal start byte 0xb2
02-05 08:17:22.472: W/dalvikvm(1892):              string: '����'
02-05 08:17:22.472: W/dalvikvm(1892):              in Ldalvik/system/NativeStart;.run ()V (NewStringUTF)
02-05 08:17:22.533: I/dalvikvm(1892): "Thread-8" prio=5 tid=7 NATIVE
02-05 08:17:22.533: I/dalvikvm(1892):   | group="main" sCount=0 dsCount=0 s=N obj=0x44e56ec0 self=0x1216e0
02-05 08:17:22.533: I/dalvikvm(1892):   | schedstat=( 43332331 173790818 11 )
02-05 08:17:22.533: I/dalvikvm(1892):   at dalvik.system.NativeStart.run(Native Method)
02-05 08:17:22.533: E/dalvikvm(1892): VM aborting是怎么回事呢?英文的时候就很正常,中文就立即崩溃

解决方案 »

  1.   

    若ASCII码可以直接转换:         result=(env)->NewStringUTF(str );
        
     若含有中文字符:  
            int length = mbstowcs(wchar_t *wcstr,const char *mbstr,size_t count);这个函数的第三个参数count,大小一定要是mbstr长度的2倍,否则出来的中文也会是乱码 。
    mbstowcs的使用是需要正确设置locale