본문 바로가기

ETC

자바(java,jsp),자바스크립트(javascript) 에서 utf-8, euc-kr 간에 한글처리

 

UTF-8 이나 EUC-KR 기타 ISO-8859-1 등 웹 서버에 설정된 여러가지 인코딩들이 존재하는데요.

이런 부분들이 섞여 있을경우 인코딩 또는 디코딩 하는데 꽤나 애를 먹습니다.

그래서 생각했던것이 각각의 문자들의 Char Code 값을 가져와 그값을 전달하면 숫자이기 때문에

쉽게 받아서 다시 역으로 해석하면 인코딩 타입에 상관없이 해결되더군요.

Char Code 값으로 바꿀때 각각의 자리수가 다르기 때문에 그에 따른 자릿수 구분 관련 부분을

추가하기 위해 소스가 약간 길어졌는데요.

보통은 Java 와 Java 사이에서 인코딩 디코딩 또는 JavaScript 와 JavaScript 사이에서 인코딩 디코딩

하겠지만 JavaScript 와 Java 사이에서도 인코딩 디코딩이 될수 있기 때문에 별도로 구현해 놓았습니다.

기본적인 인코딩 디코딩에서는 utf-8, euc-kr 때 문제가 발생 하지만 아래 방법을 사용하시면

도움이 되실 겁니다.

javascript

function fncEnCode(param)
{

    // sjisbmoc

    var encode = '';

    for(i=0; i<param.length; i++)
    {
        var len  = ''+param.charCodeAt(i);
        var token = '' + len.length;
        encode  += token + param.charCodeAt(i);
    }

    return encode;
}

function fncDeCode(param)
{

    // sjisbmoc

    var sb = '';
    var pos = 0;
    var flg = true;

    if(param != null)
    {
        if(param.length>1)
        {
            while(flg)
            {
                var sLen = param.substring(pos,++pos);
                var nLen = 0;

                try
                {
                    nLen = parseInt(sLen);
                }
                catch(e)
                {
                    nLen = 0;
                }

                var code = '';

                if((pos+nLen)>param.length)
                    code = param.substring(pos);
                else
                    code = param.substring(pos,(pos+nLen));

                pos  += nLen;
                sb += String.fromCharCode(code);

                if(pos >= param.length)
                    flg = false;
            }
        }
    }

    return sb;
}







java

public static String EnCode(String param)
{
    // sjisbmoc
    StringBuffer    sb  = new StringBuffer();

    if(param == null)
    {
        sb.append("");
    }
    else
    {
        if(param.length()>0)
        {
            for(int i=0; i<param.length(); i++)
            {
                String  len = ""+((int)param.charAt(i));
                sb.append(len.length());
                sb.append(((int)param.charAt(i)));
            }
        }
    }

    return sb.toString();
}

public static String DeCode(String param)
{

    // sjisbmoc

    StringBuffer    sb  = new StringBuffer();
    int             pos = 0;
    boolean         flg = true;

    if(param!=null)
    {
        if(param.length()>1)
        {
            while(flg)
            {
                String  sLen    = param.substring(pos,++pos);
                int     nLen    = 0;

                try
                {
                    nLen    = Integer.parseInt(sLen);
                }
                catch(Exception e)
                {
                    nLen   = 0;
                }

                String  code    = "";
                if((pos+nLen)>param.length())
                    code    = param.substring(pos);
                else
                    code    = param.substring(pos,(pos+nLen));

                pos += nLen;

                sb.append(((char) Integer.parseInt(code)));

                if(pos >= param.length())
                    flg = false;
            }
        }
    }
    else
    {
        param = "";
    }

    return sb.toString();

'ETC' 카테고리의 다른 글

[HTML5] DOCTYPE, 추가된태그, 사라진태그, 추가된input타입  (0) 2013.08.22
DB 접속 드라이버  (0) 2012.07.03
정규식  (0) 2012.06.12
CSS display 속성 - inline과 block  (0) 2012.05.31
MSSQL과 Oracle 함수 비교  (0) 2012.04.06