CodecUtils { public static byte[] parseBytes(String encodedBytes) { List<Byte> bytes = new ArrayList<>(); Matcher m = RE_URL_ENCODED_CHAR.matcher(encodedBytes); while(m.find()) { bytes.add(Integer.valueOf(m.group(0).substring(1), 16).byteValue()); } int len = bytes.size(); byte[] ret = new byte[len]; for(int i = 0; i<len; i++) { ret[i] = bytes.get(i); } return ret; }  static byte[] parseBytes(String encodedBytes); static String urlEncode(String unencoded); static String urlEncode(String unencoded, String encoding); static String urlDecode(String encoded); static String urlDecode(String encoded, String encoding); static String formEncode(T x); static String formEncode(T x, String encoding); static String formDecodeStr(String encoded); static String formDecodeStr(String encoded, String encoding); static Parameters formDecode(String encoded, String encoding); static MediaType parseMediaType(String typeStr); static String printMediaType(MediaType mediaType);  }
@Test public void parseBytes() { byte[] b = CodecUtils.parseBytes("%e3%81%82%e3%81%84%e3%81%86"); assertThat(b).isEqualTo(new byte[]{ (byte) 0xE3, (byte) 0x81, (byte) 0x82, (byte) 0xE3, (byte) 0x81, (byte) 0x84, (byte) 0xE3, (byte) 0x81, (byte) 0x86, }); }