JAVA 한글 2Byte 처리방법

  • JAVA에선 한글도 1글자, 영문이나 다른 글자도 1글자로 취급되어 substring된다. 
  • 이게 통신같은데선 문제가 될 수 있음. 한글은 2Byte, 그 외는 1Byte로 취급하는 함수 필요.
  • 참고로 한글을 UTF-8(안드로이드 스튜디오 기본 인코딩 방식)로 취급시 getbyte()시, 한글은 3Byte, 그 외에는 1Byte로 처리됨.
  • EUC-KR로 인코딩 방식을 변경하면 한글은 2Byte, 나머지는 1Byte로 처리.
 
private String subString(String strData, int iStartPos, int iByteLength) {
        byte[] bytTemp = null;
        int iRealStart = 0;
        int iRealEnd = 0;
        int iLength = 0;
        int iChar = 0;
        
        try {
            // UTF-8로 변환하는경우 한글 2Byte, 기타 1Byte로 떨어짐
            bytTemp = strData.getBytes("EUC-KR");
            iLength = bytTemp.length;

            for(int iIndex = 0; iIndex < iLength; iIndex++) {
                if(iStartPos <= iIndex) {
                    break;
                }
                iChar = (int)bytTemp[iIndex];
                if((iChar > 127)|| (iChar < 0)) {
                    // 한글의 경우(2byte 통과처리)
                    // 한글은 2Byte이기 때문에 다음 글자는 볼것도 없이 스킵한다
                    iRealStart++;
                    iIndex++;
                } else {
                    // 기타 글씨(1Byte 통과처리)
                    iRealStart++;
                }
            }
            
            iRealEnd = iRealStart;
            int iEndLength = iRealStart + iByteLength;
            for(int iIndex = iRealStart; iIndex < iEndLength; iIndex++)
            {
                iChar = (int)bytTemp[iIndex];
                if((iChar > 127)|| (iChar < 0)) {
                    // 한글의 경우(2byte 통과처리)
                    // 한글은 2Byte이기 때문에 다음 글자는 볼것도 없이 스킵한다
                    iRealEnd++;
                    iIndex++;
                } else {
                    // 기타 글씨(1Byte 통과처리)
                    iRealEnd++;
                }
            }
        } catch(Exception e) {
                //
            Log.d("DEBUG",e.getMessage());
        }

        return strData.substring(iRealStart, iRealEnd);
} 
    }

 

'Mobile > Android' 카테고리의 다른 글

Session 'app': Error Installing APKs 발생시  (1) 2017.11.09
Android Studio 3.0에서 XML Layout 이슈  (0) 2017.11.06
안드로이드 구조도  (0) 2017.11.01
복사했습니다!