安卓如何通过JNI将C字符串表情符号传递给Java
我试图通过JNI将数据库值传递给Java:
__安卓_log_print(ANDROID_LOG_ERROR, "MyApp", "c_string >>> %s", cStringValue);
prints : c_string >>> 👑👟👓
env->SetObjectField(jPosRec, myJniPosRec->_myJavaStringValue, env->NewStringUTF(strdup(cStringValue)));
然而,这是失败的,没有错误
如何将特殊字符(例如emojis)传递给JNI中的Java
提前谢谢大家
# 1 楼答案
首先,您正在泄漏
strdup()
分配的内存。使用完char*
指针后,需要将它从strdup()
传递到free()
。然而,在这种情况下根本不需要调用strdup()
,您可以直接将cStringValue
传递给JNI的NewStringUTF()
函数,JNI的^{} 函数要求输入C字符串为"modified" UTF-8格式,标准C++对此一无所知。虽然可以创建该格式的C字符串,但必须手动创建。由于java字符串使用UTF 16接口,标准C++具有UTF16字符串的功能,所以我强烈建议您使用JNI的{a3}函数。p>
如果您的数据库代码允许您检索UTF-16格式的字符串,那么您已经准备好了。如果没有,则必须先将字符串转换为UTF-16,然后再将其传递给
NewString()
(正如如果继续使用NewStringUTF()
,则必须将其转换为“修改的”UTF-8)