2012-01-10 10 views
7

In JNI, voglio convertire il char * a jstring utilizzando seguente metodo:come convertire char [] in jstring in JNI?

env->NewStringUTF(chm_pcText) 

funziona per il testo inglese, ma non è riuscito con il cinese, e ottenere seguente messaggio:

JNI WARNING: illegal continuation byte. 

come risolvere vero?

+0

La prego di inviare un po 'di codice in questione in modo da poter ottenere esattamente quello che vuoi? – Lion

+0

Che formato è 'chm_pcText'? È UTF-8? Puoi fornire un piccolo esempio di 'chm_pcText' che produce questo errore? –

+0

il chm_pcText viene letto da qualche file, la sua codifica da GBK. il suo tipo c è char *. –

risposta

15

ho appena risolverlo: due fasi, prima: convertire il char * a jbyteArray, quindi chiamare contructor di Java String per generare 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 per lo sforzo di condividere la soluzione. –

+0

@David Devi accettare la risposta. 'NewStringUTF' è una stampella, meglio usata solo per stringhe fisse che tu sai essere compatibili. –

1

NewStringUTF ha funzionato per me. Ecco il codice che ha funzionato per me:

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