在JNI,我要的char *轉換爲使用下面的方法的jstring:如何在JNI中將char []轉換爲jstring?
env->NewStringUTF(chm_pcText)
它適用於英文文本,但在中國的失敗,並獲得以下消息:
JNI WARNING: illegal continuation byte.
如何解決它呢?
在JNI,我要的char *轉換爲使用下面的方法的jstring:如何在JNI中將char []轉換爲jstring?
env->NewStringUTF(chm_pcText)
它適用於英文文本,但在中國的失敗,並獲得以下消息:
JNI WARNING: illegal continuation byte.
如何解決它呢?
我只是解決它: 兩個步驟,第一步:將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努力分享解決方案。 – 2012-01-10 06:33:15
@大衛你應該接受答案。 'NewStringUTF'是柺杖,最好只用於固定的字符串,你知道它們是兼容的。 – 2014-03-21 22:37:29
NewStringUTF爲我工作。這裏是代碼工作對我來說:
char *returnString = (char*)malloc(10);
strcpy(returnString, "電腦");
return (*jnienv)->NewStringUTF(jnienv, returnString);
你可以請張貼一些相關的代碼,以便我們可以得到你想要的? – Lion 2012-01-10 02:40:33
'chm_pcText'是什麼格式?它是UTF-8嗎?你能提供一個產生這個錯誤的'chm_pcText'的小例子嗎? – 2012-01-10 03:29:35
chm_pcText是從某個文件中讀取的,它的編碼方式是GBK。它的c類型是char *。 – 2012-01-10 05:57:44