我在代码下使用JNI将jchararray转换为jstring,但我只获得Linux中的第一个字符。
char *carr =(char*)malloc(length+1);
(*env)->GetCharArrayRegion(env, ch, 0, length, carr);
return (*env)->NewStringUTF(env, carr);
答案 0 :(得分:1)
GetCharArrayRegion
返回Java字符,即 UTF-16 代码点。和jchar
在JNI中,并且它们不是以空值终止的,并且您不能使用NewStringUTF
,它期望以修改 UTF-中包含字节的以空字符结尾的字符串8编码。
首先,分配正确的内存量
jchar *carr = malloc(length * sizeof(jchar));
然后执行GetCharArrayRegion
(*env)->GetCharArrayRegion(env, ch, 0, length, carr);
然后注意你有一个UTF-16字符数组。如果第一个字符属于ASCII范围,并且体系结构是little-endian,则预期您只是“获取第一个字符”,因为第一个{{1}的MSB 字节将为零,NewStringUTF
会认为这是终结符。请改用NewString
:
jchar
答案 1 :(得分:0)
你应该使用 NewString()函数,它接受 jchar 数组及其长度。 NewStringUTF()函数将UTF-8编码的C字符串作为输入。
有关详细信息,请参阅https://www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface.html#zz-4.2。