안녕하십니까? 안드로이드상에서 jni을 이용하여 .so로 모듈을 작성하여 해당 함수처리 후 그 리턴결과(한글포함)을 리턴하고자하는데요.

환경) 안드로이드 에뮬레이터 (한글적용)
          jni 연동 .so(.c 모듈과의 연동)

알고자하는것) 안드로이드 java쪽과 jni통해 .so의 리턴받은 msg(한글포함) 된것을 한글을 정상적으로 받고자합니다.
                          혹 안드로이드쪽 java <=> jni <=> .so 로 한글을 정상적으로 받는 방법을 아시는분이 계신지요..
                          .so에서 리턴된 결과를 java에서 한글이 깨져서 나와서 문의드립니다.

음 리턴된 msg가 한글이 깨져서 나옵니다. 이리저리해봐도 한글이 깨져서 나오네요. c (.so)파일쪽에서 확인해본바로는

정상적으로 한글이 나오구요.(로그찍어본 파일에 확인해본바로는..)

기존 cgwin환경에서는 한글테스트해보면.. 정상적으로 나옵니다.

도통 안드로이드쪽에서 테스트해보면 한글이 깨져서 나오네요.

(안드로이드는 한글화해서 한글 나오는것까진 확인했습니다. setText  로 한글을 임의로 찍어봄)

setText 로 jni통해서 넘어온 msg를 화면상에 출력해봐도 한글이 깨지구요. Log.d는 원체 한글이 깨진다고 하고..

c쪽에서 아래와 같이 선언한후..

======================== 1번째 테스트 - 배열로 작성후 배열로 java쪽으로 넘겨주고 ======================

char str[3][100] = {"노무현", "대통령", "짱!!!"};

 for(i = 0; i < i1; i++)
 {
  (*env)->GetObjectArrayElement(env, ar, i);
  iArray = javaNewString(env, cstr2jbyteArray(env, str[i])); 
  (*env)->SetObjectArrayElement(env, ar, i, iArray);
 }

이렇게해서 리턴해주고.. ar을 java쪽에서 찍어봐도..

String msg_ar[] = new String[3];

Log.d("jni_log", "ar[" + i + "] = " + msg_ar[i]);

msg_ar[0] 이것도 한글은 깨져서 나오네요.

setText 로 확인해보면 한글이 깨져나옵니다.

======================== 1번째 테스트 - 배열로 작성후 배열로 java쪽으로 넘겨주고 ======================

======================== 2번째 테스트 -javaNewString cstr2jbyteArray로 작성후 java쪽으로 넘겨주고 ======================
혹시나 아래와 같이 하면 될까하고 또 변경해봐도..

 cls = (*env)->GetObjectClass(env, obj);
 jFieldId = (*env)->GetFieldID(env, cls, "msg", "Ljava/lang/String;");

msg = javaNewString(env, cstr2jbyteArray(env, msg_char));

(*env)->SetObjectField(env, obj, jFieldId, msg);

java에서..
result_msg = myJNI.msg; 을 해봐도 여전히 한글이 깨져서 나오구요.. 끙..

convert = new String(result_msg.getBytes("UTF-8"), "KSC5601");

결과]

1) output_msg는 .so에서 받은 내용을 그대로 찍은 내용이며
2) test_msg는 java쪽에서 test_msg = "1234567890한글테스트";
로 안드로이드쪽이 한글이 지원되는지 확인하기 위해 찍어본 내용..
3) conver_msg는 UTF-8을 KSC5601로 변환후 찍어본 내용입니다.

숫자같은 경우는 정상이고 한글만 깨져서 나옵니다. 움.. jstring이 utf-8이라 그걸 unicode로 변경해줘도 의도대로 되지않네요.

jni_so.JPG 
======================== 2번째 테스트 -javaNewString cstr2jbyteArray로 작성후 java쪽으로 넘겨주고 ======================