2012-01-10 66 views
7

在JNI,我要的char *轉換爲使用下面的方法的jstring:如何在JNI中將char []轉換爲jstring?

env->NewStringUTF(chm_pcText) 

它適用於英文文本,但在中國的失敗,並獲得以下消息:

JNI WARNING: illegal continuation byte. 

如何解決它呢?

+0

你可以請張貼一些相關的代碼,以便我們可以得到你想要的? – Lion 2012-01-10 02:40:33

+0

'chm_pcText'是什麼格式?它是UTF-8嗎?你能提供一個產生這個錯誤的'chm_pcText'的小例子嗎? – 2012-01-10 03:29:35

+0

chm_pcText是從某個文件中讀取的,它的編碼方式是GBK。它的c類型是char *。 – 2012-01-10 05:57:44

回答

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努力分享解決方案。 – 2012-01-10 06:33:15

+0

@大衛你應該接受答案。 'NewStringUTF'是柺杖,最好只用於固定的字符串,你知道它們是兼容的。 – 2014-03-21 22:37:29

1

NewStringUTF爲我工作。這裏是代碼工作對我來說:

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