Я вызываю метод JNI из приложения Java с парой аргументов String. Я использую env->GetStringChars(arg1, 0 );, чтобы получить эти строки. Проблема в том, что я иногда получаю дополнительные специальные символы или строка обрезается.
env->GetStringChars(arg1, 0 );
В Java символы - это 16-битные символы (в кодировке UTF-16).Если вы рассматриваете их как простые char* в C, вы увидите нулевые байты (которые обычно обозначаются как конец строки) или другие специальные символы.
char*
Возможно, вам следует использовать кодировку UTF, чтобы избежать нуляголец.Вам все равно придется обрабатывать специальные символы в кодировке UTF.
http://java.sun.com/docs/books/jni/html/objtypes.html
Наконец я нашел решение
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;