Пример #1
0
 /**
  * 解码application/x-www-form-urlencoded字符
  *
  * @param content 被编码内容
  * @return 编码后的字符
  */
 public static String decode(String content, String charset) {
   if (StrUtil.isBlank(content)) return content;
   String encodeContnt = null;
   try {
     encodeContnt = URLDecoder.decode(content, charset);
   } catch (UnsupportedEncodingException e) {
     throw new UtilException(StrUtil.format("Unsupported encoding: [{}]", charset), e);
   }
   return encodeContnt;
 }
Пример #2
0
  /**
   * 从Http连接的头信息中获得字符集
   *
   * @param conn HTTP连接对象
   * @return 字符集
   */
  public static String getCharset(HttpURLConnection conn) {
    if (conn == null) {
      return null;
    }

    String charset = conn.getContentEncoding();
    if (StrUtil.isBlank(charset)) {
      charset = ReUtil.get(CHARSET_PATTERN, conn.getContentType(), 1);
    }
    return charset;
  }
Пример #3
0
  /**
   * 将URL参数解析为Map(也可以解析Post中的键值对参数)
   *
   * @param paramsStr 参数字符串(或者带参数的Path)
   * @param charset 字符集
   * @return 参数Map
   */
  public static Map<String, List<String>> decodeParams(String paramsStr, String charset) {
    if (StrUtil.isBlank(paramsStr)) {
      return Collections.emptyMap();
    }

    // 去掉Path部分
    int pathEndPos = paramsStr.indexOf('?');
    if (pathEndPos > 0) {
      paramsStr = StrUtil.subSuf(paramsStr, pathEndPos + 1);
    }
    paramsStr = decode(paramsStr, charset);

    final Map<String, List<String>> params = new LinkedHashMap<String, List<String>>();
    String name = null;
    int pos = 0; // 未处理字符开始位置
    int i; // 未处理字符结束位置
    char c; // 当前字符
    for (i = 0; i < paramsStr.length(); i++) {
      c = paramsStr.charAt(i);
      if (c == '=' && name == null) { // 键值对的分界点
        if (pos != i) {
          name = paramsStr.substring(pos, i);
        }
        pos = i + 1;
      } else if (c == '&' || c == ';') { // 参数对的分界点
        if (name == null && pos != i) {
          // 对于像&a&这类无参数值的字符串,我们将name为a的值设为""
          addParam(params, paramsStr.substring(pos, i), StrUtil.EMPTY);
        } else if (name != null) {
          addParam(params, name, paramsStr.substring(pos, i));
          name = null;
        }
        pos = i + 1;
      }
    }

    if (pos != i) {
      if (name == null) {
        addParam(params, paramsStr.substring(pos, i), StrUtil.EMPTY);
      } else {
        addParam(params, name, paramsStr.substring(pos, i));
      }
    } else if (name != null) {
      addParam(params, name, StrUtil.EMPTY);
    }

    return params;
  }
Пример #4
0
 /**
  * 检测给定字符串是否为未知,多用于检测HTTP请求相关<br>
  *
  * @param checkString 被检测的字符串
  * @return 是否未知
  */
 public static boolean isUnknow(String checkString) {
   return StrUtil.isBlank(checkString) || "unknown".equalsIgnoreCase(checkString);
 }