字符串到JNI获取额外的字符

时间:2011-07-12 12:45:40

标签: java string java-native-interface

我使用几个String参数从Java应用程序调用JNI方法。 我正在使用env->GetStringChars(arg1, 0 );来获取字符串。 问题是我有时会得到一些额外的特殊字符或字符串被截断。

2 个答案:

答案 0 :(得分:1)

在Java中,字符是16位字符(UTF-16编码)。如果您将它们视为C中的普通char*,您将看到nul字节(通常作为字符串的末尾处理)或其他特殊字符。

也许您应该使用避免使用nul char的UTF编码。您仍然需要处理UTF编码的特殊字符。

http://java.sun.com/docs/books/jni/html/objtypes.html

答案 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;