Pro*_*Rev 1 c++ java java-native-interface android emoji
我正在尝试通过 JNI 将数据库值传递给 Java:
__android_log_print(ANDROID_LOG_ERROR, "MyApp", "c_string >>> %s", cStringValue);
打印: c_string >>>
env->SetObjectField(jPosRec, myJniPosRec->_myJavaStringValue, env->NewStringUTF(strdup(cStringValue)));
Run Code Online (Sandbox Code Playgroud)
但是,这将失败而没有错误。
您如何在 JNI中将特殊字符(例如表情符号)传递给 Java?
谢谢大家。
Charset.forName("UTF-8").decode(bb).toString()
Run Code Online (Sandbox Code Playgroud)
如下,其中每个段落大致实现一个步骤,最后一个将您的对象字段设置为结果:
jobject bb = env->NewDirectByteBuffer((void *) cStringValue, strlen(cStringValue));
jclass cls_Charset = env->FindClass("java/nio/charset/Charset");
jmethodID mid_Charset_forName = env->GetStaticMethodID(cls_Charset, "forName", "(Ljava/lang/String;)Ljava/nio/charset/Charset;");
jobject charset = env->CallStaticObjectMethod(cls_Charset, mid_Charset_forName, env->NewStringUTF("UTF-8"));
jmethodID mid_Charset_decode = env->GetMethodID(cls_Charset, "decode", "(Ljava/nio/ByteBuffer;)Ljava/nio/CharBuffer;");
jobject cb = env->CallObjectMethod(charset, mid_Charset_decode, bb);
jclass cls_CharBuffer = env->FindClass("java/nio/CharBuffer");
jmethodID mid_CharBuffer_toString = env->GetMethodID(cls_CharBuffer, "toString", "()Ljava/lang/String;");
jstring str = env->CallObjectMethod(cb, mid_CharBuffer_toString);
env->SetObjectField(jPosRec, myJniPosRec->_myJavaStringValue, str);
Run Code Online (Sandbox Code Playgroud)