Java 使用NDK将UTF8转换为UTF16

Java 使用NDK将UTF8转换为UTF16,java,c++,utf-8,android-ndk,java-native-interface,Java,C++,Utf 8,Android Ndk,Java Native Interface,我正在开发一个Android应用程序,它有很多c++(本机)代码,所以我使用JNI与应用程序的Java部分进行交互。现在,我想在本机代码中将字符串从UTF8转换为UTF16,反之亦然。 为此,我正在使用JNI函数 下面是从UTF8转换为UTF16的代码 //Create New jString using the utf8 string. jstring jStr = env->NewStringUTF(str.c_str()); //Now we have a jstring whi

我正在开发一个Android应用程序,它有很多c++(本机)代码,所以我使用JNI与应用程序的Java部分进行交互。现在,我想在本机代码中将字符串从UTF8转换为UTF16,反之亦然。 为此,我正在使用JNI函数

下面是从UTF8转换为UTF16的代码

//Create New jString using the utf8 string.

jstring jStr = env->NewStringUTF(str.c_str());

//Now we have a jstring which keeps the data in unicode format 
// so get the UTF16 data from the JString.

const jchar *utf16Raw = env->GetStringChars(jStr, JNI_FALSE);

if (utf16Raw != nullptr) {
   //Use Unicode data
} 

但是我怀疑这个逻辑是否正确,或者我需要使用JNI将我的jstring移动到JAVA端,然后将jstring从utf8转换为utf16?

为什么您怀疑您的逻辑是否正确?它不起作用吗?您当然可以将VM用作MUTF8-to-UTF16转换器,但请记住,每次都分配一个字符串对象。如果您只感兴趣的是字符串格式转换,您可以找到直接转换的C++代码。FUWW,UTF 16不是很好(见),所以仔细考虑它是否是最好的工作。逻辑工作良好。我只是想更加肯定。在内部,我们在所有地方都使用UTF8。如果您在所有地方都使用UTF8,为什么要转换为UTF16或从UTF16转换为UTF-8?您确定已在std::string中修改了UTF-8吗?NewStringUTF就是这么做的:“在将字符串从本机传递回Java的情况下,如果没有正确修改UTF-8,JNI肯定会崩溃”为什么您怀疑您的逻辑是否正确?它不起作用吗?您当然可以将VM用作MUTF8-to-UTF16转换器,但请记住,每次都分配一个字符串对象。如果您只感兴趣的是字符串格式转换,您可以找到直接转换的C++代码。FUWW,UTF 16不是很好(见),所以仔细考虑它是否是最好的工作。逻辑工作良好。我只是想更加肯定。在内部,我们在所有地方都使用UTF8。如果您在所有地方都使用UTF8,为什么要转换为UTF16或从UTF16转换为UTF-8?您确定已在std::string中修改了UTF-8吗?NewStringUTF就是这么做的:“在将字符串从本机传递回Java的情况下,如果没有正确修改UTF-8,JNI肯定会崩溃。”