public static boolean validatePrintableUTF8(byte[] data) {
	    for (int i = 0; i < data.length; i++) {
	        byte octet = data[i];
	        if (octet == 0x0D || octet == 0x0A) {
	        	continue;
	        }
	        if (0 < octet && octet < 0x20) {
	        	return false;
	        }
	        if (octet == 0x7F) {
	        	return false;
	        }
	        if ((octet & 0x80) == 0) {
	            continue;
	        }
	        int end = 0;
	        if ((octet & 0xE0) == 0xC0) {
	            end = i + 1;
	        } else if ((octet & 0xF0) == 0xE0) {
	            end = i + 2;
	        } else if ((octet & 0xF8) == 0xF0) {
	            end = i + 3;
	        } else { /* Java supports BMP only */
	            return false;
	        }
	        while (i < end) {
	            i++;
	            octet = data[i];
	            if ((octet & 0xC0) != 0x80) {
	                return false;
	            }
	        }
	    }
	    return true;
	}
@param input
@param hexPattern
@param hexReplace
@return
src/main/java/core/packetproxy/common/StringUtils.java