首页 > 解决方案 > 如何从 C/C++ 在 JNI for Java 中创建 UTF16 字符串?

问题描述

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

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

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

标签: javac++java-native-interface

解决方案


我所拥有的char*指向真正的 UTF-8数据,而不是修改后的 UTF-8数据。因此,我先将字符串转换为 UTF-16,然后使用NewString生成 Java 字符串。为了将 UTF-8 转换为 UTF-16,我使用了这个库

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

推荐阅读