private static String decodeUTF(byte[] bytes) {
		int len = bytes.length;
		StringBuffer sbuf = new StringBuffer(len);
		for (int i = 0; i < len; i++) {
			int c1 = bytes[i];
			if (c1 <= 0) {
				if (++i >= len)
					return null;
				int c2 = bytes[i];
				if ((c2 & 0xc0) != 0x80)
					return null;
				if ((c1 & 0xe0) == 0xc0) {
					c1 = ((c1 & 0x1f) << 6) | (c2 & 0x3f);
				} else {
					if (++i >= len || (c1 & 0xf0) != 0xe0)
						return null;
					int c3 = bytes[i];
					if ((c3 & 0xc0) != 0x80)
						return null;
					c1 = (c1 << 12) | ((c2 & 0x3f) << 6) | (c3 & 0x3f);
				}
			}
			sbuf.append((char) c1);
		}
		return sbuf.toString();
	}