使用jni从c ++发送UTF字符到java

时间:2011-11-24 14:45:37

标签: java c++ character-encoding java-native-interface

我想将Hangul(使用UTF的韩文符号)文本从C发送到JAVA。 但是JAVA获得的结果不正确 示例:

JNIEXPORT jstring JNICALL Java_get_1term
  (JNIEnv *env, jobject, jint termInd)
{
    const char *str = "음뮤원음직음원샘";
    return (env)->NewStringUTF(str);
}

但是在那种情况下JAVA得到了错误的字符串。

我在其他帖子中找不到我的问题的答案,如果有同样的问题请给我链接

1 个答案:

答案 0 :(得分:1)

尝试这一点(从here采取并改编):

jstring WindowsToJstring(JNIEnv* pEnv, char* cstr) {
   jstring retJstring = NULL;
   int slen = strlen(cstr);
   int length = MultiByteToWideChar( CP_ACP, 0, (LPCSTR)cstr, slen, NULL, 0 );
   unsigned short* tempbuffer = (unsigned short *)malloc( length*2 + 1 );
   MultiByteToWideChar( CP_ACP, 0, (LPCSTR)cstr, slen, (LPWSTR)tempbuffer, length );
   retJstring = (pEnv)->NewString((jchar*)tempbuffer, length );
   free( tempbuffer );
   return retJstring;
}

编辑正如@Kerrek SB正确指出的那样,这是一个仅限Windows的解决方案