package us.bannister.encoders; public class EncoderUTF8 { public byte[] buffer; public int size; public EncoderUTF8(int n) { buffer = new byte[n]; } public void encode(String s) { int i = size; for (char c : s.toCharArray()) { int v = 255 & c; if (v < 0x80) { buffer[i++] = (byte) v; } else if (v < 0x800) { buffer[i++] = (byte) (0xC0 | (v >> 6)); buffer[i++] = (byte) (0x80 | (63 & v)); } else if (v < 0x10000) { buffer[i++] = (byte) (0xE0 | (v >> 12)); buffer[i++] = (byte) (0x80 | (63 & (v >> 6))); buffer[i++] = (byte) (0x80 | (63 & v)); } else { buffer[i++] = (byte) (0xF0 | (v >> 18)); buffer[i++] = (byte) (0x80 | (63 & (v >> 12))); buffer[i++] = (byte) (0x80 | (63 & (v >> 6))); buffer[i++] = (byte) (0x80 | (63 & v)); } } size = i; } }