java的实体里定义的char[] name JNI定义结构体属性char[] name将结构体属性值(中文)传给java是乱码,怎么解决?不要让我改变属性类型!
迷茫2017-04-17 17:53:41
C中的char[]字符串,默认情况下是UTF-8编码的可以通过JNIEnv的NewStringUTF()函数将C中的char[]字符串转为Java的字符串,这个函数的签名为:
jstring NewStringUTF(const char* bytes)
高洛峰2017-04-17 17:53:41
看个最简单的例子:
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. 去掉尾部"rrreee"
int len_buf = strlen(buf);
string result(buf, len_buf);
return env->NewStringUTF(result.c_str());
}