怎么通过JNI将C字符串Emoji传递给Java

原学程将引见若何经由过程JNI将C字符串Emoji传播给Java的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

怎么通过JNI将C字符串Emoji传递给Java 教程 第1张

成绩描写

我正在测验考试经由过程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传播特别字符?

提早感激年夜野。

推举谜底

从my answer开端,您不妨应用

的JNI等效项

Charset.forName("UTF⑻").decode(bb).toString()

以下所示,每一个段降年夜致完成1个步调,最初1段将对于象字段树立为成果:

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

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的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。