我用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是怎么回事呢?英文的时候就很正常,中文就立即崩溃
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是怎么回事呢?英文的时候就很正常,中文就立即崩溃
若含有中文字符:
int length = mbstowcs(wchar_t *wcstr,const char *mbstr,size_t count);这个函数的第三个参数count,大小一定要是mbstr长度的2倍,否则出来的中文也会是乱码 。
mbstowcs的使用是需要正确设置locale