如何通过JNI将C字符串Emoji传递给Java [英] How to pass a C String Emoji to Java via JNI

查看:0
本文介绍了如何通过JNI将C字符串Emoji传递给Java的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

__Android_LOG_Print(Android_LOG_ERROR,&Quot;MyApp";,";c_STRING>;>;%s";,cStringValue);

打印:c_STRING;>;>;👑👟👓

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

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

如何在JNI中向Java传递特殊字符(如emoji)

提前感谢大家。

推荐答案

my answer开始,您可以使用

的JNI等效项
Charset.forName("UTF-8").decode(bb).toString()

如下所示,每个段落大致实现一个步骤,最后一段将对象字段设置为结果:

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);  

这篇关于如何通过JNI将C字符串Emoji传递给Java的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆