有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓如何通过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) 个答案

  1. # 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)