본문 바로가기
개발/Web || Mobile

java byte[]-> string와 java

by 백아절현 2008. 10. 20.
원문 : http://kldp.org/node/98167

첫째, 이 문제는 자바의 문제(버그)가 아니라 해당 프로그램의 문제(버그)이므로 코드체계를 확실히 이해한다면 큰 문제가 아닙니다.
자바는 유니코드를 사용합니다. 그러나 이것을 바이트열로 표현하는데에는 여러가지 방법이 있으며 이것을 인코딩(캐릭터셋, 코드페이지 등 여러가지 표현이 있습니다)이라고 합니다. 자바는 실행환경에 따라 인코딩이 다를 수 있습니다. MS윈도는 MS949, 제 우분투는 UTF-8. 다시 말해 인코딩이 다르면 같은 글자라 하더라도 바이트 배열이 다를 수 있습니다. String(byte[] bytes) 생성자는 전달받는 바이트열을 자신(자바가 실행되는 환경)의 인코딩인 것으로 간주합니다. 이것은 대부분의 시스템에서 문제가 없습니다. 그런데 왜 생성자 String(byte[] bytes)이 문제가 되는가 하면 1)통신환경 같은 경우에서 자신의 인코딩은 UTF-8인데 전달받은 바이트열이 EUC_KR과 같은 경우 2)파일을 읽고 쓰는 어떤 프로그램이 지금의 인코딩과 다른 인코딩을 쓰는 시스템으로 이주하는 경우 등이 있기 때문입니다. 이 바이트열을 다른 인코딩으로 해석해버리므로 당연히 잘못된 결과물을 얻을 수 밖에 없습니다. 따라서 필요에 따라 String(byte[] bytes, Charset charset) 같은 생성자를 써서 프로그램을 작성하면 됩니다.

둘째, 자바는 유니코드를 사용합니다. 유니코드에서 하나의 글자는 하나의 글자일 뿐입니다. 한글로 하나의 글자라도 몇개의 바이트가 쓰일지는 인코딩에 따라 다릅니다. C 프로그램과 상호 운용이 필요하다면 인코딩만 적당히 맞춰주면 됩니다.
C에서 한글이 2바이트라고 하셨는데 인코딩을 정확히 알아 보셔야할 듯 합니다.

ㅇ 영어라 아쉽기는 하지만 자세하고 확실한 내용은 역시 API 문서가 최고입니다.
www.javaservice.net, www.okjsp.pe.kr같은 사이트에 가보시면 자바에 관한 왠만한 답은 다 있으니 이쪽을 둘러보시는 것도 좋습니다.

'개발 > Web || Mobile' 카테고리의 다른 글

폭 구하기 및 디버그  (0) 2008.11.05
multi selectbox 예제  (0) 2008.11.04
overflow set Style  (0) 2008.10.06
url 비교  (0) 2008.09.05
javaScript URLEncode  (0) 2008.08.29

댓글