2012-01-10 2 views
7

В JNI, я хочу преобразовать символ * в jstring, используя следующий метод:Как преобразовать char [] в jstring в JNI?

env->NewStringUTF(chm_pcText) 

это работает для английского текста, но не с китайцами, и получить следующее сообщение:

JNI WARNING: illegal continuation byte. 

Как решить Это ?

+0

Не могли бы вы разместить соответствующий код, чтобы мы могли получить именно то, что вы хотите? – Lion

+0

Какой формат 'chm_pcText'? Это UTF-8? Можете ли вы представить небольшой пример 'chm_pcText', который создает эту ошибку? –

+0

chm_pcText считывается из некоторого файла, его кодировка осуществляется GBK. его тип c - char *. –

ответ

15

Я только что решил: два шага, сначала: преобразуйте 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); 
+3

+1 за попытку поделиться решением. –

+0

@David Вы должны принять ответ. 'NewStringUTF' - это костыль, лучше всего использовать только для фиксированных строк, которые, как вы знаете, совместимы. –

1

NewStringUTF работал для меня. Вот код, который работал для меня:

char *returnString = (char*)malloc(10); 
strcpy(returnString, "电脑"); 
return (*jnienv)->NewStringUTF(jnienv, returnString); 
Смежные вопросы