Java jni字符串转换

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编码,可减少一次编码转换

jboolean isCopy = JNI_FALSE;
     const jchar* value = env->GetStringChars(jstringValue, &isCopy);
     if (value != NULL)
     {
         QString qsValue = QString::fromUtf16(value);
         if (isCopy)
         {
             env->ReleaseStringChars(jstringValue, value);
         }
     }

另外关于GetStringUTFChars返回的是(改进的)utf8编码字符串,可以参考这篇文章:https://blog.wsxyeah.xyz/2016/07/23/jni-charset-encoding/

2、jstring转BSTR

因为BSTR就是unicode编码,用GetStringChars转换很方便:

jboolean isCopy = JNI_FALSE;
     const jchar* paramValue = env->GetStringChars(jstrParam, &isCopy);
     if (paramValue != NULL)
     {
         BSTR bstr = SysAllocString(paramValue); //使用后记得释放:SysFreeString(bstr);
         if (isCopy)
         {
             env->ReleaseStringChars(jstrParam, paramValue);
         }
     }

相关推荐