如何通过JNI将C字符串表情符号传递给Java

问题描述 投票:-1回答:1

我正在尝试通过JNI将数据库值传递给Java:

__ android_log_print(ANDROID_LOG_ERROR,“ MyApp”,“ c_string >>>%s”,cStringValue);

prints: c_string >>>👑👟👓

env->SetObjectField(jPosRec, myJniPosRec->_myJavaStringValue, env->NewStringUTF(strdup(cStringValue)));  

但是,此操作将失败且没有错误。

您如何将特殊字符(例如表情符号)传递给JNI中的Java?

谢谢大家。

java android c++ java-native-interface emoji
1个回答
0
投票

首先,您正在泄漏strdup()分配的内存。使用完后,需要将char*指针从strdup()传递到free()。完全不需要调用strdup(),您可以将cStringValue直接传递给NewStringUTF()

就是说,JNI的NewStringUTF()函数要求输入的C字符串为modified UTF-8格式,而标准C ++对此一无所知。尽管可以用这种格式创建char*字符串,但是您将必须手动创建。由于Java字符串使用UTF-16接口,并且标准C ++具有使用UTF-16字符串的功能,因此我强烈建议您改用JNI的NewString()函数。

如果数据库代码允许您检索UTF-16格式的字符串,那么您已经准备就绪。如果不是,则必须在将字符串传递给JNI之前将其转换为UTF-16(就像将它们转换为modified UTF-8)一样。

© www.soinside.com 2019 - 2024. All rights reserved.