Я обращаюсь к функции ICU4C через JNI, которая возвращает UChar * (т.е. массив символов Unicode) .... Я смог преобразовать это в jbyteArray, приравнивая каждый член массива UChar к локальному массиву jbyte [], который Я создал, а затем вернул его в Java с помощью функции env-> SetByteArrayRegion () ... теперь у меня есть массив Byte [] в Java, но все это довольно бессмысленно ... В лучшем случае странные символы ... Я не уверен где проблема может быть ... Я работаю с символами Юникода, если это имеет значение ... как мне правильно преобразовать байт [] в символ [] в Java? Что-то не правильно отображается ... Вот фрагмент кода:
--- JNI-код (изменено, чтобы сделать его короче) ---
static jint testFunction(JNIEnv* env, jclass c, jcharArray srcArray, jbyteArray destArray) {
jchar* src = env->GetCharArrayElements(srcArray, NULL);
int n = env->getArrayLength(srcArray);
UChar *testStr = new UChar[n];
jbyte destChr[n];
//calling ICU4C function here
icu_function (src, testStr); //takes source characters and returns UChar*
for (int i=0; i<n; i++)
destChr[i] = testStr[i]; //is this correct?
delete testStr;
env->SetByteArrayRegion(destArray, 0, n, destChr);
env->ReleaseCharArrayElements(srcArray, src, JNI_ABORT);
return (n); //anything for now
}
- код Java -
string wohoo = "ABCD bal bla bla";
char [] myChars = wohoo.toCharArray ();
byte[] myICUBytes = new byte[myChars.length];
int value = MyClass.testFunction (myChars, myICUBytes);
System.out.println(new String(myICUBytes)) ;// produces gibberish & weird symbols
Я также попытался: System.out.println (новая строка (myICUBytes, Charset.forName ("UTF-16"))), и это так же, как и gebberishy ....
обратите внимание, что функция ICU возвращает правильные символы Юникода в UChar * ... где-то между преобразованием в jbyteArray и Java, которое не работает ...
Помощь!