接口调用时对url进行Encode编码

一,对url进行utf-8编码

  1)在接口调用中可能会遇到需要对url进行编码与解码问题,在网络上找了相应方法,以提供参考

二,网络上找到的编码与解码工具类

package com.rain.demo;
import java.io.UnsupportedEncodingException;
public class UTF8{
  /**
   * Utf8URL编码
   * @param s
   * @return
   */
  public static final String Utf8URLencode(String text) {
    StringBuffer result = new StringBuffer();
    for (int i = 0; i < text.length(); i++) {
      char c = text.charAt(i);
      if (c >= 0 && c <= 255) {
        result.append(c);
      }else {
        byte[] b = new byte[0];
        try {
          b = Character.toString(c).getBytes("UTF-8");
        }catch (Exception ex) {
        }
        for (int j = 0; j < b.length; j++) {
          int k = b[j];
          if (k < 0) k += 256;
          result.append("%" + Integer.toHexString(k).toUpperCase());
        }
      }
    }
    return result.toString();
  }
  /**
   * Utf8URL解码
   * @param text
   * @return
   */
  public static final String Utf8URLdecode(String text) {
    String result = "";
    int p = 0;
    if (text!=null && text.length()>0){
      text = text.toLowerCase();
      p = text.indexOf("%e");
      if (p == -1) return text;
      while (p != -1) {
        result += text.substring(0, p);
        text = text.substring(p, text.length());
        if (text == "" || text.length() < 9) return result;

        result += CodeToWord(text.substring(0, 9));
        text = text.substring(9, text.length());
        p = text.indexOf("%e");
      }
    }
    return result + text;
  }
  /**
   * utf8URL编码转字符
   * @param text
   * @return
   */
  private static final String CodeToWord(String text) {
    String result;
    if (Utf8codeCheck(text)) {
      byte[] code = new byte[3];
      code[0] = (byte) (Integer.parseInt(text.substring(1, 3), 16) - 256);
      code[1] = (byte) (Integer.parseInt(text.substring(4, 6), 16) - 256);
      code[2] = (byte) (Integer.parseInt(text.substring(7, 9), 16) - 256);
      try {
        result = new String(code, "UTF-8");
      }catch (UnsupportedEncodingException ex) {
        result = null;
      }
    }
    else {
      result = text;
    }
    return result;
  }
  /**
   * 编码是否有效
   * @param text
   * @return
   */
  private static final boolean Utf8codeCheck(String text){
    String sign = "";
    if (text.startsWith("%e"))
      for (int i = 0, p = 0; p != -1; i++) {
        p = text.indexOf("%", p);
        if (p != -1)
          p++;
        sign += p;
      }
    return sign.equals("147-1");
  }
  /**
   * 判断是否Utf8Url编码
   * @param text
   * @return
   */
  public static final boolean isUtf8Url(String text) {
    text = text.toLowerCase();
    int p = text.indexOf("%");
    if (p != -1 && text.length() - p > 9) {
      text = text.substring(p, p + 9);
    }
    return Utf8codeCheck(text);
  }
  /**
   * 测试
   * @param args
   */
  public static void main(String[] args) {
    String url;
    url = "http://www.google.com/search?hl=zh-CN&newwindow=1&q=%E4%B8%AD%E5%9B%BD%E5%A4%A7%E7%99%BE%E7%A7%91%E5%9C%A8%E7%BA%BF%E5%85%A8%E6%96%87%E6%A3%80%E7%B4%A2&btnG=%E6%90%9C%E7%B4%A2&lr=";
    if(CharTools.isUtf8Url(url)){
      System.out.println(CharTools.Utf8URLdecode(url));
    }
    url = "http://www.google.com/search?hl=zh-cn&newwindow=1&q=中国大百科在线全文检索&btng=搜索&lr=";
    if(!CharTools.isUtf8Url(url)){
        System.out.println(CharTools.Utf8URLencode(url));
    }
  }
}
时间: 2024-10-07 14:11:30

接口调用时对url进行Encode编码的相关文章

Objective-C 对 URL 进展 URLEncode 编码

Objective-C 对 URL 进行 URLEncode 编码在 iOS 程序访问 HTTP 资源时需要对 URL 进行 Encode,比如像拼出来的 +&sd f&p2=中文,其中的中文.特殊符号&%和空格都必须进行转译才能正确访问. 在 Java..net 和 JS 中都有相应的 encodeURL 方法可用,在 Objective-C 语言中,你可以试下 - (NSString *)stringByAddingPercentEscapesUsingEncoding:(NS

关于web开发工程中URL参数的编码问题

近日在项目中,在velocity开发的页面模板中的使用a标签创建链接,并且带有需要提交的参数(这里没有使用form的原因是因为该模板生成的email,发送给客户,由于客户的email客户端可能是https,而模板上面的链接并不是跳转到https的站点,使用form将导致浏览器这种混合的链接).当通过该模板生成的页面上进行跳转时,发现链接提交的参数发生了变化,具体表现是参数提交时是一串包含10位任意可输出字符的字符串,字符串里有“+”字符,提交后后台后“+”字符不见了,取而代之是一个空格.通过fi

PHP安全的URL字符串base64编码和解码

这篇文章主要介绍了PHP安全的URL字符串base64编码和解码,在base64的基础上替换了不安全的一些字符,需要的朋友可以参考下 如果直接使用base64_encode和base64_decode方法的话,生成的字符串可能不适用URL地址.下面的方法可以解决该问题: URL安全的字符串编码: function urlsafe_b64encode($string) {    $data = base64_encode($string);    $data = str_replace(array

【转】堆栈跟踪中收到一个UnhandledExceptionFilter调用时,如何查找问题异常堆栈

定义没有异常处理程序来处理引发的异常时调用UnhandledExceptionFilter函数.函数通常将异常传递到捕获并处理它所尝试的 Ntdll.dll 文件. 在某些情况下,在其中存在的进程内存快照,您可以看到一个线程持有的锁点的线程调用UnhandledExceptionFilter函数.在这些情况下,您可以按照本文来标识导致异常的 DLL 中的步骤. 通过使用 Windbg.exe 打开转储文件 下载并安装调试程序.若要下载调试程序,请访问下面的 Microsoft 网站:Micros

url为什么要编码

在做通过关键词查询条目的需求时,发现前端IOS传过来的"中文关键字"是通过url编码的字串,直接使用,我们是是用不了的,拿php为例,我们需要对该值使用urldecode()函数进行解码,解码后就会是对应的中文了.当时觉得很纳闷,为什么前端要对参数编码后传给后台,心里的答案时为了安全起见,防止别人截取url后对其中的参数进行解析.但是,总感觉好模棱两可,既然我后台可以解码出正确值,为什么截取了你url的人不可以呢,如此哪来的安全可言. 于是,我就问了问之前工作的ios的同事,结果,他斩

Encode编码

Encode编码: Java是双字节编码utf-16be,中文占用2个字符,英文占用2个字符. 项目默认编码是GBK,中文占用2个字符,英文占用1个字符. UTF-8编码:中文占用3个字符,英文占用1个字符. 文本文件就是字节序列,可以是任意编码的字节序六二,编码只是读取的方式,当字节序列是某种编码时,要把字节序列转换成字符串,也要用这种编码的方式,否则会发生乱码. package com.zhao.encode; import java.io.UnsupportedEncodingExcept

HttpUtility.UrlEncode 方法 (String) 对 URL 字符串进行编码 NET Framework 4.6 and 4.5

对 URL 字符串进行编码. 这些方法重载可用于对整个 URL(包括查询字符串值)进行编码. 要编码或解码 Web 应用程序之外的值,请使用 WebUtility 类. 重载此成员.有关此成员的完整信息(包括语法.用法和示例),请单击重载列表中的相应名称.

PHP2(url二次编码)

PHP2 抓包查看 什么也没有  那就扫一下目录吧 御剑开启 发现了index.phps  可能你没扫到 那说明你该把它添加到你的字典里了 访问 感觉好像少了点什么,查看一下源代码 让我们传入一个id 不能直接传入admin  但是对id使用urldecode以后的值还必须是admin     这个时候就要使用url二次编码了 说一下我对url二次编码的理解 当我们在url输入数据的时候,url会对其进行url编码 比如输入空格的时候会自动编码为%20 而当服务器在接收这些数据的时候会自动进行u

URL的字符编码

摘要: 在通过URL访问HTTP SERVER的时候,通常会产生trace callback的异常,返回505的错误," VERSION IS NOT SUPPORTED ?" ,难道是客户端协议版本和服务端不兼容,这个就不太可能了,究竟是什么原因.要从URL的字符编码说起. URL 字符编码: URL 只能使用ASCII字符集. 来通过因特网进行发送.由于 URL 常常会包含 ASCII 集合之外的字符,URL 必须转换为有效的 ASCII 格式. URL 编码使用 "%&