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 |