private String manualDecode(String s) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c == '%') {
                if (i + 2 < s.length()) {
                    try {
                        int num = Integer.parseInt(s.substring(i + 1, i + 3), 16);
                        sb.append((char) num);
                        i += 2;
                    } catch (NumberFormatException | StringIndexOutOfBoundsException e) {
                        // Invalid escape sequence or end of string reached
                        sb.append(c);
                    }
                } else {
                    // Invalid escape sequence
                    sb.append(c);
                }
            } else {
                sb.append(c);
            }
        }
        return sb.toString();
    }
splitQuery
@param query
@return java.util.Map<java.lang.String,java.lang.String>
@Description: Since Java 8 lacks URI decoding support available in Java 10+, URLDecoder.decode() cannot be used.
Therefore, a manual decoding method is implemented to extract query parameters.
inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/string/ParseUrlFunction.java