2006년 10월 04일
자바와 문자셋 인코딩
문자셋 인코딩에 대한 개념을 잘 모르시겠다면 이전에 올린 문자셋, 문자셋 인코딩이란? 글 에서 참고하실 수 있습니다.

자바에서 String 객체는 문자열을 유니코드로 저장합니다.

String 생성자중에 아래와 같은 것이 있습니다.
String(byte[] bytes, String charsetName)

생성자의 charsetName은 byte 배열인 bytes가 어떤 인코딩인지 생성자에게 가르쳐줍니다.
bytes의 값이 EUC-KR 인코딩 방식 바이트로 나열되어 있을때 charsetName의 값으로 "UTF-8"을 넘긴다고 해서 EUC-KR이 UTF-8로 변경되는 것이 아닙니다.

오히려 잘못된 인코딩 정보를 가르쳐 주었기 때문에 String 생성자는 EUC-KR인 bytes 값을 UTF-8로 해석하여 잘못된 유니코드 문자로 저장이 됩니다.

getBytes() 메소드를 이용하여 String 객체에 유니코드로 저장되어 있는 문자열을 바이트 배열로 구할 수 있습니다.
구해지는 바이트 배열은 인코딩에 따라 값이 다릅니다.

String str = "가";
byte[] buf = str.getBytes();

이때 getBytes() 메소드에 아무런 인수를 전달하지 않으면 플랫폼에 사용하는 기본 인코딩이 선택되어 집니다.

byte[] buf = str.getBytes("UTF-8");
이런식으로 직접 인코딩을 선택하여 바이트 배열을 구할 수 있습니다.

System.out.println()으로 출력은 JVM의 기본 인코딩에 따라 출력됩니다.

결론은 자바는 내부적으로 문자열은 유니코드로 처리되며 출력시 상황에 맞는 인코딩으로 출력이 된다는 것입니다.
by -A2- | 2006/10/04 16:52 | 개발/플밍 | 트랙백 | 덧글(2)
트랙백 주소 : http://ani2life.egloos.com/tb/2735402
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by daybreaker at 2006/10/12 00:19
Python도 비슷한 방식입니다.
'한글'.decode('euc-kr').encode('utf-8')과 같이 하면 인코딩 변환이 이루어지는데, '한글'.decode('euc-kr')까지만 한 상태는 바로 내부 인코딩에 따라 저장된 상태가 되는 것이죠.
Commented by -A2- at 2006/10/12 09:06
daybreaker// 저도 언젠가는 파이썬을 써보고 싶어요. :)

:         :

:

비공개 덧글



<< 이전 페이지 | 다음 페이지 >>