2012-01-10 21 views
7

En JNI, quiero convertir el char * a jstring usando siguiente método:cómo convertir char [] a jstring en JNI?

env->NewStringUTF(chm_pcText) 

funciona para el texto Inglés, pero fracasaron con el chino, y recibe el siguiente mensaje:

JNI WARNING: illegal continuation byte. 

cómo resolver eso ?

+0

¿Podría publicar algún código relevante para que podamos obtener exactamente lo que desea? – Lion

+0

¿Qué formato es 'chm_pcText'? ¿Es UTF-8? ¿Puedes proporcionar un pequeño ejemplo de 'chm_pcText' que produce este error? –

+0

el chm_pcText se lee de algún archivo, su codificación por GBK. su tipo c es char *. –

Respuesta

15

Solo lo resuelvo: dos pasos, primero: convierta el char * a jbyteArray, luego llame al contructor de java String para generar un 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); 
+3

+1 por hacer el esfuerzo de compartir la solución. –

+0

@David Deberías aceptar la respuesta. 'NewStringUTF' es muleta, se usa mejor solo para cadenas fijas que usted sabe que son compatibles. –

1

NewStringUTF funcionó para mí. Aquí está el código que funcionó para mí:

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