static String readChunk(BufferedReader br, int len) throws Exception {
		StringBuilder sb = new StringBuilder();

		for (int i = 0; i < len; ++i) {
			int ch = br.read();
			if (ch < 0)
				throw new Exception("unexpected EOF in body");

			if (ch >= U_0080 && ch < U_0800) // 2 bytes
				++i;
			else if (ch >= U_D800 && ch < U_E000) // 2 + 2 bytes
				++i;
			else if (ch >= U_0800 && ch < U_10000) // 3 bytes
				i += 2;
			else if (ch >= U_10000) // 4 bytes
				i += 3;
			sb.append((char) ch);
		}
		return sb.toString();
	}