如何在 JNI 中为来自 C/C++ 的 Java 创建 UTF16 字符串?

How to create UTF16 string in JNI for Java from C/C++?

我有一个 C/C++ char* 字符串,它有笑脸,但其余内容是 ASCII 格式的。例如,Hello World .

当我尝试使用 NewStringUTFNewString 在 JNI 中创建 Java 字符串时,行为未定义。

创建 Java 字符串的正确方法是什么?

我的 char* 指向 true UTF-8 数据而不是 modified UTF-8 数据。因此,我先将字符串转换为 UTF-16,然后使用 NewString 生成 Java 字符串。 为了将 UTF-8 转换为 UTF-16,我使用了 this library.

string line = myStringWithSmiley;
u16string utf16line = utf8::utf8to16(line);
return env->NewString((const jchar*)(utf16line.c_str()), utf16line.length());