如何在JNI中将char []转换为jstring?

时间:2012-01-10 02:37:06

标签: android java-native-interface

在jni中,我想使用以下方法将char *转换为jstring:

env->NewStringUTF(chm_pcText)

适用于英文文本,但中文失败,并收到以下信息:

JNI WARNING: illegal continuation byte.

如何解决?

2 个答案:

答案 0 :(得分:18)

我只是解决它: 两步,第一步:将char *转换为jbyteArray,然后调用java String的构造函数生成一个jstring。

 strClass = global_env->FindClass("java/lang/String"); 
 ctorID = global_env->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V"); 
 encoding = global_env->NewStringUTF("GBK"); 

jbyteArray bytes = global_env->NewByteArray(strlen(chm_pcText)); 
global_env->SetByteArrayRegion(bytes, 0, strlen(chm_pcText), (jbyte*)chm_pcText); 
jstring str = (jstring)global_env->NewObject(strClass, ctorID, bytes, encoding);

答案 1 :(得分:1)

NewStringUTF为我工作。这是适用于我的代码:

char *returnString = (char*)malloc(10);
strcpy(returnString, "电脑");
return  (*jnienv)->NewStringUTF(jnienv, returnString);
相关问题