한글은 두바이트 글자이므로 byte로 변환을 하면 0보다 작은 같이 된다.
따라서 변환전에 마지막 byte 부터 0보다 작은 값의 수가 짝이 맞는지 검사 하여 변환 길이 값을 조절 하면 된다.
int cnt=0;
for( int i=len-1; i >= 0 ; i-- ){
if( b[i] < 0 ) cnt++;
else break;
}
if( cnt % 2 == 0)
str = new String( b, 0, len, "euc-kr"); // 짝이 맞으면 길이대로 변환
else
str = new String( b, 0, len-1, "euc-kr"); // 짝이 맞지 않으면 마지막 byte는 버린다.
* 변환된 string의 마지막 char가 ? 인지 검사하는 방법은 무슨 이유인지 동작하지 않음.
str.charAt( str.length() - 1 ) == '?' ==> false
str.substring( str.length() - 1).equals("?") ==> false
--------
테스트 코드 ( Java 1.6으로 테스트 함 )
--------
public class EncTest {
public static void main(String[] args) throws Exception{
String str = "한글테스트;";
byte[] b = str.getBytes("euc-kr");
System.out.println(b.length);
printByte( b );
for( int len = 10; len > 7 ; len--){
int cnt=0;
for( int i=len-1; i >= 0 ; i-- ){
if( b[i] < 0 ) cnt++;
else break;
}
if( cnt % 2 == 0)
str = new String( b, 0, len, "euc-kr");
else
str = new String( b, 0, len-1, "euc-kr");
System.out.println(str.length()+":"+str+":"+str.getBytes().length);
printByte(str.getBytes() );
}
}
private static void printByte( byte[] data ){
int i=0;
for( byte b : data){
System.out.printf("%d : %d %x; ",i++,b,b);
}
System.out.println();
}
}