UChar * (즉, 유니 코드 문자 배열)을 반환하는 JNI를 통해 ICU4C 함수에 액세스하고 있습니다. UChar 배열의 각 멤버를 a로 변환하여 jbyteArray로 변환 할 수있었습니다. 내가 만든 로컬 jbyte [] 배열을 env-> SetByteArrayRegion() 함수를 사용하여 Java 반환했습니다 ... 이제 Java에서 Byte [] 배열을 가지고 있지만 모든 횡설수설이 있습니다 .. 기껏해야 이상한 기호. .. 어디에 문제가 있을지 모르겠다 ... 문제가 있다면 유니 코드 문자로 작업하고있다 ... 바이트 [] Java로 제대로 char [] 어떻게 변환합니까? 뭔가 여기에 코드 조각입니다 ... 바로 매핑되지 않는 :ICU4C 바이트를 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
}
이 - 자바 코드 - 문자열 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 (새로운 String (myICUBytes을 Charset.forName는 ("UTF-16")))과 마찬가지로 gebberishy입니다 ....
ICU 함수가 UChar *에서 올바른 유니 코드 문자를 반환한다는 점에 유의하십시오. ... jbyteArray와 Java 로의 변환 사이의 어딘가에 ...
Help!
동일한 질문을 두 번 질문하지 마십시오. 귀하의 문제가 이미 (명백하게) 해결되었음을 확인하기 위해 다른 사본에 상당한 시간을 할애했습니다. –