Строка для JNI получает дополнительные символы - PullRequest
1 голос
/ 12 июля 2011

Я вызываю метод JNI из приложения Java с парой аргументов String. Я использую env->GetStringChars(arg1, 0 );, чтобы получить эти строки. Проблема в том, что я иногда получаю дополнительные специальные символы или строка обрезается.

Ответы [ 2 ]

1 голос
/ 12 июля 2011

В Java символы - это 16-битные символы (в кодировке UTF-16).Если вы рассматриваете их как простые char* в C, вы увидите нулевые байты (которые обычно обозначаются как конец строки) или другие специальные символы.

Возможно, вам следует использовать кодировку UTF, чтобы избежать нуляголец.Вам все равно придется обрабатывать специальные символы в кодировке UTF.

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

0 голосов
/ 26 августа 2011

Наконец я нашел решение

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...