안녕하십니까? jni를 통해 java와 .c(.so)의 연동을 하고 있습니다.

테스트 해보니 java와 jni .c(.so) 끼리는 utf-8을 통한(jni) 한글데이타 send, recive는 잘되더군요..

java 는 unicode
jni jstring은 utf-8
.c(.so)는 ansi(소켓통신) 입니다.

java 에서 string을 하나 만든 후 그걸 jni 통해서 .c(.so)로 전달하면 한글이 깨지지않고 잘 전달됩니다.

또 .c(.so)에서 java에서 던진 string을 char에 복사한 후 다시 jni 통해서 java로 던지면 한글이 잘 출력됩니다.

한데 .c(.so)에서 소켓통신으로 받은 char(ansi) 코드를 java쪽으로 jni통해서 던지면..

한글이 죽어도 깨집니다. java쪽에서 KSC5601로 디코딩해도 깨지더군요..

jni통하면서 한글이 깨져버리는지.. 그래서 .c(.so)에서 hex로 convert 후 java쪽으로 던져줬습니다.

hex는 어차피 숫자이니 변할께 없죠.. java쪽에서 정확히 hex코드를 받았습니다.

그걸 다시 hex to string으로 변경 하니 똑같이 한글이 깨지더군요..

의문이 hex로 변경한 char(ansi)가.. (전 jni 통하면서 utf-8로 강제적으로 변경돼서 한글이 깨지는가했는데.. => 아직도 이렇다고 생각함)

근데 hex로 변경 한 내용이 정확히 java쪽으로 전달돼고 그걸 java에서 hex to string으로 변경하니 똑같이 깨지는겁니다...

hex가 다시 ansi코드로 원복되는가보네요. 그래서 hex to string한걸 디코딩 해줘봤습니다. 그래도 한글이 정상적으로 복원이

안되는데요.

.c(.so)에서 ansi로 된 char를 jni를 통해서 java에서 풀 방법이 없는거 같구요.

.c(.so)에서 utf-8이든 uincode든 먼저 convert 해준 후 그걸 java쪽으로 던져줄수밖에 없을꺼 같은데요.

.c(.so) linux 환경에서는 iconv가 없다고 하던군요. icu라고 있는 것 같던데.. 아직까진 그걸 모르겠습니다.

결론은 java도 utf-8(또는 unicode) 로 jni(utf-8) .c(.so)도 utf-8로 서로 맞춰주고 데이타를 연동해야할거 같습니다. 그렇지않고는

전혀 방법이 없는듯합니다.

다른 분들.. 혹 java <=> jni <=> .c(.so)      .c(.so)에서 tcp/ip 소켓통신 한 후(ansi) 그 데이타를 java로 정상적으로

받으신 분의 지도편달 좀 부탁드립니다. hex로도 안돼고 .c(.so)에선 utf-8, unicode로 바꿀 방법이 없구.. 난감하네요.

아시는 분의 답글 좀 부탁드립니다.