84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
java的实体里定义的char[] name JNI定义结构体属性char[] name将结构体属性值(中文)传给java是乱码,怎么解决?不要让我改变属性类型!
人生最曼妙的风景,竟是内心的淡定与从容!
参考一下这篇文章
要先搞清楚两边分别是什么编码。
C中的char[]字符串,默认情况下是UTF-8编码的可以通过JNIEnv的NewStringUTF()函数将C中的char[]字符串转为Java的字符串,这个函数的签名为:
jstring NewStringUTF(const char* bytes)
看个最简单的例子:
JNIEXPORT jstring JNICALL Java_com_example_gnaix_ndk_NativeMethod_getString (JNIEnv *env, jclass object, jstring str){ //1. 将unicode编码的java字符串转换成C风格字符串 const char *buf_name = env->GetStringUTFChars(str, 0); if(buf_name == NULL){ return NULL; } int len = strlen(buf_name); char n_name[len]; strcpy(n_name, buf_name); //2. 释放内存 env->ReleaseStringUTFChars(str, buf_name); //3. 处理 n_name="ro.serialno" char buf[1024]; __system_property_get(n_name, buf); LOGD("serialno : %s", buf); //4. 去掉尾部"\0" int len_buf = strlen(buf); string result(buf, len_buf); return env->NewStringUTF(result.c_str()); }
参考一下这篇文章
要先搞清楚两边分别是什么编码。
C中的char[]字符串,默认情况下是UTF-8编码的可以通过JNIEnv的NewStringUTF()函数将C中的char[]字符串转为Java的字符串,这个函数的签名为:
看个最简单的例子: