White Whale Studio

[Java] String to UTF-8 변환 Encoding 본문

IT Engineering/Android 혹은 Java

[Java] String to UTF-8 변환 Encoding

glorymind 2014. 2. 18. 09:40
반응형

오늘은 java 에서의 UTF-8 변환 방법을 살펴볼겁니다.

맨날 C#.Net에서 놀다가 자바를 만지려니 영 불편한 것이 한두가지가 아니군요.


아무튼 시작합니다.


보통 UTF-8로 변환하는 경우라고 하면 웹 사이트에서 검색이나 API를 사용할 때가 많겠죠.


.Net에서도 마찬가지이긴 합니다만... java는 그리 쓸일이 없어 사실 조금 헤맸습니다.


이번에 제가 할 포스팅은 한글 String을 변환하여 최종적으로 웹에서 검색이 가능한 UTF-8 문자열로 변환시키는 것이 목적입니다.


우선 String에서 UTF-8 코드로 변환하는 방법입니다.


String teststr = "배열 테스트";

byte[] b; // 우선 바이트 배열을 선언하고

b = teststr.getBytes("UTF-8"); // teststr로 부터 UTF-8 형식으로 바이트를 가져옵니다.


이렇게 가져온 b 배열을 하나씩 찍어보면 다음과 같습니다.


-21-80-80-20-105-7632-19-123-116-20-118-92-19-118-72


보통 웹에서는 

%EC%84 등등 이와 같은 형식과 같이 16진수 형태로 표현한 것을 종종 보셨을 겁니다.

저희도 이와같이 바꿔볼겁니다.

우선 b 배열에서 각 항목별로 가져와서 16진수로 바꿔보면


for (int i = 0; i < b.length; i++) {

System.out.print(Integer.toHexString(b[i]));

}


ffffffebffffffb0ffffffb0ffffffecffffff97ffffffb420ffffffedffffff85ffffff8cffffffecffffff8affffffa4ffffffedffffff8affffffb8

과 같이 출력됩니다.


중간에 있는 20은 스페이스 바 즉, 공백 문자라고 보시면 되구요. 저희가 필요한 것은 ffffff를 제외한 부분이므로 replace나 substring을 사용해서 ffffff를 %로 바꿔줍시다.

저는 SubString을 사용했습니다.


for (int i = 0; i < b.length; i++) {

if(Integer.toHexString(b[i]).length() > 3){

System.out.print("%" + Integer.toHexString(b[i]).substring(6, 8));

} else{

System.out.print("%" + Integer.toHexString(b[i]));

}

}


위와 같은 코드를 사용해서 돌려보면 최종적으로 


%eb%b0%b0%ec%97%b4%20%ed%85%8c%ec%8a%a4%ed%8a%b8


와 같이 원하는 코드가 나오게 됩니다. 끝~~!

반응형
Comments