我使用几个String参数从Java应用程序调用JNI方法。
我正在使用env->GetStringChars(arg1, 0 );
来获取字符串。
问题是我有时会得到一些额外的特殊字符或字符串被截断。
答案 0 :(得分:1)
在Java中,字符是16位字符(UTF-16编码)。如果您将它们视为C中的普通char*
,您将看到nul字节(通常作为字符串的末尾处理)或其他特殊字符。
也许您应该使用避免使用nul char的UTF编码。您仍然需要处理UTF编码的特殊字符。
答案 1 :(得分:0)
最后我找到了解决方案
const jchar* raw = env->GetStringChars(string, NULL);
if (raw == NULL)
return NULL;
wchar_t* wsz = new wchar_t[len+1];
memcpy(wsz, raw, len*2);
wsz[len] = 0;
env->ReleaseStringChars(string, raw);
return wsz;