요즘 개발하고 있는 프로그램에
javascript 에 있는 escape 함수가 필요해져서 삽질을 시작했다.

자바 스크립트로 테스트 html 페이지 만들어
ASCII 코드 ~127 까지 넣어보면서 -_- 삽질을 했다.

[CODE type="java"]public static String escape(String string){
[tab]StringBuffer sb = new StringBuffer();
[tab]String ncStr = "*+-./0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz";
[tab]char c;
[tab]
[tab]for(int i=0;i<string.length();i++){
[tab][tab]c = string.charAt(i);
[tab][tab]if(c>0x7f){
[tab][tab][tab]sb.append("%u");
[tab][tab][tab]sb.append(Integer.toHexString((int)c).toUpperCase());
[tab][tab]}
[tab][tab]else if(ncStr.indexOf((int)c)==-1){
[tab][tab][tab]sb.append('%');
[tab][tab][tab]if(c<=0xf)
[tab][tab][tab][tab]sb.append('0');
[tab][tab][tab]sb.append(Integer.toHexString((int)c).toUpperCase());
[tab][tab]}
[tab][tab]else
[tab][tab][tab]sb.append(c);
[tab]}
[tab]
[tab]return sb.toString();
}
[/CODE]

'개발 > Java' 카테고리의 다른 글

Jemote 삽질중  (5) 2007.06.16
나는야 버그 제조기 2  (5) 2007.05.24
javascrpt 의 escape 함수를 java로 구현  (8) 2007.02.19
JFrame 뜨면서 포커싱이 안가게 하기  (1) 2007.02.15
한글입력기  (3) 2006.12.21
java socket encoding 삽질기  (3) 2006.09.10
  1. LinDol 2007.02.19 22:28 댓글주소 | 수정 | 삭제 | 댓글

    결국은 구현 하셨군요~ ^^
    ㅊㄱㅅ ㅋㅋ

  2. rath 2007.02.20 13:31 댓글주소 | 수정 | 삭제 | 댓글

    와와 대단~

  3. 박정규 2007.09.04 15:48 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요..
    제가 지금 급하게 필요해서 그런데요...

    혹시 , unescape() 스크립트 함수를
    .java 파일로 구현해 보신 건 없으시나요??

    아~~~

    nateman@empal.com

    부탁드립니다.

  4. 수평선 2009.06.08 13:56 댓글주소 | 수정 | 삭제 | 댓글

    public class EscapeUnescape {

    public static String escape(String src) {
    int i;
    char j;
    StringBuffer tmp = new StringBuffer();
    tmp.ensureCapacity(src.length() * 6);
    for (i = 0; i < src.length(); i ) {
    j = src.charAt(i);
    if (Character.isDigit(j) || Character.isLowerCase(j)
    || Character.isUpperCase(j))
    tmp.append(j);
    else if (j < 256) {
    tmp.append("%");
    if (j < 16)
    tmp.append("0");
    tmp.append(Integer.toString(j, 16));
    } else {
    tmp.append("%u");
    tmp.append(Integer.toString(j, 16));
    }
    }
    return tmp.toString();
    }

    public static String unescape(String src) {
    StringBuffer tmp = new StringBuffer();
    tmp.ensureCapacity(src.length());
    int lastPos = 0, pos = 0;
    char ch;
    while (lastPos < src.length()) {
    pos = src.indexOf("%", lastPos);
    if (pos == lastPos) {
    if (src.charAt(pos 1) == 'u') {
    ch = (char) Integer.parseInt(src
    .substring(pos 2, pos 6), 16);
    tmp.append(ch);
    lastPos = pos 6;
    } else {
    ch = (char) Integer.parseInt(src
    .substring(pos 1, pos 3), 16);
    tmp.append(ch);
    lastPos = pos 3;
    }
    } else {
    if (pos == -1) {
    tmp.append(src.substring(lastPos));
    lastPos = src.length();
    } else {
    tmp.append(src.substring(lastPos, pos));
    lastPos = pos;
    }
    }
    }
    return tmp.toString();
    }

    public static void main(String[] args) {
    String tmp = "中文";
    System.out.println("testing escape : " tmp);
    tmp = escape(tmp);
    System.out.println(tmp);
    System.out.println("testing unescape :" tmp);
    System.out.println(unescape("%u4e2d%u6587"));
    }
    }

  5. 쿠나 2010.01.16 23:51 댓글주소 | 수정 | 삭제 | 댓글

    훌륭하십니다!
    소스 좀 인용할게요 :)

  6. 이진영 2010.04.26 01:44 댓글주소 | 수정 | 삭제 | 댓글

    궁금한 점은 자바는 0~127 즉 7비트만 아스키로 인정하나요?
    유니코드는 128~ 7비트 이상 되는 숫자 전부를 유니코드로 인식하는건간요?
    256이상을 유니코드로 보는것 아닌지 궁금하네요

  7. 설악단 2010.06.17 17:55 댓글주소 | 수정 | 삭제 | 댓글

    좋은정보네여..퍼갑니다