1. 程式人生 > >Java jni字符串轉換

Java jni字符串轉換

pan code ref span 一次 tar OS null ase

1、jstring轉QString

對於Qt5.2以上(含)可以用QAndroidJniObject::toString(),詳見這裏:https://stackoverflow.com/questions/27345570/convert-jstring-to-qstring

低版本的Qt就要自己轉換了,jni中有兩個獲取jstring的方法:

GetStringUTFChars——獲取(改進的)utf8編碼字符串

GetStringChars——獲取unicode編碼字符串,推薦用這種,因為Java內部就是unicode編碼,可減少一次編碼轉換

 1     jboolean isCopy = JNI_FALSE;
2 const jchar* value = env->GetStringChars(jstringValue, &isCopy); 3 if (value != NULL) 4 { 5 QString qsValue = QString::fromUtf16(value); 6 if (isCopy) 7 { 8 env->ReleaseStringChars(jstringValue, value); 9 } 10 }

另外關於GetStringUTFChars返回的是(改進的)utf8編碼字符串

,可以參考這篇文章:https://blog.wsxyeah.xyz/2016/07/23/jni-charset-encoding/

2、jstring轉BSTR

因為BSTR就是unicode編碼,用GetStringChars轉換很方便:

 1     jboolean isCopy = JNI_FALSE;
 2     const jchar* paramValue = env->GetStringChars(jstrParam, &isCopy);
 3     if (paramValue != NULL)
 4     {
 5         BSTR bstr = SysAllocString(paramValue); //
使用後記得釋放:SysFreeString(bstr); 6 if (isCopy) 7 { 8 env->ReleaseStringChars(jstrParam, paramValue); 9 } 10 }

Java jni字符串轉換