language/java

Java | queryString 등 문자열 중에서 한글만 찾아 인코딩하기 / 유니코드 활용

CofS 2016. 11. 24. 16:14

 

Java | 문자열(URL, QueryString 등) 중에서 한글만 찾아 인코딩하기

 

 

Java에서 특정 문자열 중 한글만 골라 인코딩 해야할 경우가 있다.

 

예를 들면

 

웹프로젝트를 진행중에 한글이 깨지는 경우들이 있다.

 

controller 에서 redirect 를 할 때 url 또는 queryString 에 한글이 표함되어 있을 수 있다.

 

이때 한글을 전송하면 공백(%20)으로 치환되거나 이상한 특수문자로 깨지는 경우가있다.

 

또는 페이지 이동 등 전송 중에 parameter 에 한글이 있는 경우 한글이 깨지는 경우가 있다.

 

문자열에 특정 규칙이 존재한다면 String 함수들로도 충분히 변환이 가능하다.

 

하지만 불규칙하게 한글이 섞여 있는 경우에는 다른 방법을 찾아봐야 한다.

 



 

고민하던 중 문자열 중에서 한글만 찾아낸 뒤 찾은 한글만 인코딩하면 될거같다는 생각이 들었다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
    String txt = "http://cofs.tistory.com?param1=a123&param2=한글&param3=개발자&param4=cofs";
    char[] txtChar = txt.toCharArray();
    for (int j = 0; j < txtChar.length; j++) {
        if (txtChar[j] >= '\uAC00' && txtChar[j] <= '\uD7A3') {
            String targetText = String.valueOf(txtChar[j]);
            try {
                txt = txt.replace(targetText, URLEncoder.encode(targetText, "euc-kr"));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        } 
    }
cs

1# : 한글이 섞여있는 URL

2# : 케릭터 타입 배열로 변환

3# : 배열만큼 루프

4# : 유니코드 한글 음절 uAC00부터 uD7A3 까지 체크

7# : 한글을 인코딩한 문자로 replace 함

 

 

txt 변수의 값

http://cofs.tistory.com?param1=a123&param2=한글&param3=개발자&param4=cofs

 

txt 변수의 결과값

http://cofs.tistory.com?param1=a123&param2=%C7%D1%B1%DB&param3=%B0%B3%B9%DF%C0%DA&param4=cofs

 

 

원하는 결과를 도출한것 같다.