iconv() 에서 utf16-le 변환에 대한 질문입니다.

lovejin0309의 이미지

언어 : c

GNU의 libiconv 를 사용해서 인코딩을 변환하는 프로그램을 짜고 있습니다.

UTF-8, UTF-7 을 EUC-KR 로 변환하는 것은 잘 동작하는데 UTF-16LE 를 EUC-KR 로 변환하는 부분이 잘 안되고 있습니다.

iconv() 를 사용할 때, 다음과 같이 사용합니다.

iconv(ic, (char **)&msgbuf, &in_left, &p_out_buf, &out_left);

ln_left 와 out_left는 strlen(msgbuf) 를 사용해서 셋팅을 하고 있습니다.

디버깅을 해 보니까 utf-8, utf-7 의 경우는 strlen(msgbuf) 로 길이를 알아낼 수 있지만, utf16-le 는 중간 중간 널 문자가 존재하기 때문ㅇ strlen(msgbuf)로 길이를 알아 낼수 없었습니다.

정리하자면

in_left = strlen(msgbuf);
out_left = strlen(msgbuf);

인데 utf16-LE일 경우에는 모두 길이가 1로 정해지기 때문에 그런 문제가 생기는 것입니다.

어떤 해결 방법이 없을까요?

kewlbear의 이미지

in_left는 처음 한번만 넣어주면 되는 것인데 처음 입력 데이터의 길이를 모르시나요?