안드로이드 개발 질문/답변
(글 수 45,052)
안녕하십니까? 안드로이드환경(자바환경에서도) 한글자리기를 할때 euc-kr환경이라면..
unicode이기때문에 한글이 2byte입니다. 해서 utf-8은 한글이 3byte네요.
아래와 같은 자르기 함수를 이용했습니다. 델파이의 copy함수처럼 만들고있는건데요.
델파이 copy함수는 copy(내용, 시작int, 끝int)
아래의 함수를 이용하면 자르기는 정확히 됩니다. (bystStr = str.getBytes("EUC-KR"); 이렇게 하면 2byte로 되는것이기때문에 정확히
잘라주죠. 한데 한글이 깨집니다.. 개발환경이 utf-8환경이기때문에(안드로이드에서는 기본utf-8을 사용하죠..?
String str 은 utf-8 한글인데요.. 어떻게 해야 2byte씩 자르고 한글도 깨지지않을까요..
다른분들 해보신 분들의 조언 좀 부탁드리겠습니다.
public static String copy(String str, int sLoc, int eLoc) {
byte[] bystStr;
String rltStr = str;
Log.e("TEST", "copy rltStr => [" + rltStr + "]");
try
{
sLoc = sLoc - 1;
//bystStr = str.getBytes(); => 이렇게 하면 기본 default utf-8이기때문에 3byte씩 잘립니다.
bystStr = str.getBytes("EUC-KR"); => 이렇게 하면 euc-kr로 2byte로 계산하기때문에 정확하게 잘리지만 한글이 깨집니다.
int bytelen = bystStr.length;
if(bytelen >= (eLoc+sLoc)){
rltStr = new String(bystStr, sLoc, eLoc).getBytes();
//dec_str = new String(Base64.decode(enc_str), "UTF-8").toString();
//rltStr = new String(new String(bystStr, sLoc, eLoc).getBytes(), "UTF-8").toString();
//rltStr = new String(new String(bystStr, sLoc, eLoc).getBytes("UTF-8"));
//rltStr = new String(new String(bystStr, sLoc, eLoc).getBytes("EUC-KR"), "UTF-8");
Log.e("TEST", "copy rltStr return => [" + rltStr + "]");
}
}
catch(Exception e)
{
return rltStr;
}
return rltStr;
}
unicode이기때문에 한글이 2byte입니다. 해서 utf-8은 한글이 3byte네요.
아래와 같은 자르기 함수를 이용했습니다. 델파이의 copy함수처럼 만들고있는건데요.
델파이 copy함수는 copy(내용, 시작int, 끝int)
아래의 함수를 이용하면 자르기는 정확히 됩니다. (bystStr = str.getBytes("EUC-KR"); 이렇게 하면 2byte로 되는것이기때문에 정확히
잘라주죠. 한데 한글이 깨집니다.. 개발환경이 utf-8환경이기때문에(안드로이드에서는 기본utf-8을 사용하죠..?
String str 은 utf-8 한글인데요.. 어떻게 해야 2byte씩 자르고 한글도 깨지지않을까요..
다른분들 해보신 분들의 조언 좀 부탁드리겠습니다.
public static String copy(String str, int sLoc, int eLoc) {
byte[] bystStr;
String rltStr = str;
Log.e("TEST", "copy rltStr => [" + rltStr + "]");
try
{
sLoc = sLoc - 1;
//bystStr = str.getBytes(); => 이렇게 하면 기본 default utf-8이기때문에 3byte씩 잘립니다.
bystStr = str.getBytes("EUC-KR"); => 이렇게 하면 euc-kr로 2byte로 계산하기때문에 정확하게 잘리지만 한글이 깨집니다.
int bytelen = bystStr.length;
if(bytelen >= (eLoc+sLoc)){
rltStr = new String(bystStr, sLoc, eLoc).getBytes();
//dec_str = new String(Base64.decode(enc_str), "UTF-8").toString();
//rltStr = new String(new String(bystStr, sLoc, eLoc).getBytes(), "UTF-8").toString();
//rltStr = new String(new String(bystStr, sLoc, eLoc).getBytes("UTF-8"));
//rltStr = new String(new String(bystStr, sLoc, eLoc).getBytes("EUC-KR"), "UTF-8");
Log.e("TEST", "copy rltStr return => [" + rltStr + "]");
}
}
catch(Exception e)
{
return rltStr;
}
return rltStr;
}



