public static byte[] stringToUtf8Bytes(String string){
  int len=string.length();
  byte[] bytes=new byte[len * 3];
  int outAt=0;
  for (int i=0; i < len; i++) {
    char c=string.charAt(i);
    if ((c != 0) && (c < 0x80)) {
      bytes[outAt]=(byte)c;
      outAt++;
    }
 else     if (c < 0x800) {
      bytes[outAt]=(byte)(((c >> 6) & 0x1f) | 0xc0);
      bytes[outAt + 1]=(byte)((c & 0x3f) | 0x80);
      outAt+=2;
    }
 else {
      bytes[outAt]=(byte)(((c >> 12) & 0x0f) | 0xe0);
      bytes[outAt + 1]=(byte)(((c >> 6) & 0x3f) | 0x80);
      bytes[outAt + 2]=(byte)((c & 0x3f) | 0x80);
      outAt+=3;
    }
  }
  byte[] result=new byte[outAt];
  System.arraycopy(bytes,0,result,0,outAt);
  return result;
}

public static byte [ ] stringToUtf8Bytes ( String string ) { int len = string . length ( ) ; byte [ ] bytes = new byte [ len * 3 ] ; int outAt = 0 ; for ( int i = 0 ; i < len ; i ++ ) { char c = string . charAt ( i ) ; if ( ( c != 0 ) && ( c < 0x80 ) ) { bytes [ outAt ] = ( byte ) c ; outAt ++ ; } else if ( c < 0x800 ) { bytes [ outAt ] = ( byte ) ( ( ( c > > 6 ) & 0x1f ) | 0xc0 ) ; bytes [ outAt + 1 ] = ( byte ) ( ( c & 0x3f ) | 0x80 ) ; outAt += 2 ; } else { bytes [ outAt ] = ( byte ) ( ( ( c > > 12 ) & 0x0f ) | 0xe0 ) ; bytes [ outAt + 1 ] = ( byte ) ( ( ( c > > 6 ) & 0x3f ) | 0x80 ) ; bytes [ outAt + 2 ] = ( byte ) ( ( c & 0x3f ) | 0x80 ) ; outAt += 3 ; } } byte [ ] result = new byte [ outAt ] ; System . arraycopy ( bytes , 0 , result , 0 , outAt ) ; return result ; }
converts a string into its mutf - 8 form . mutf - 8 differs from normal utf - 8 in the handling of character ' \ 0 ' and surrogate pairs .
