Http请求时URL中的中文编码

Http请求时,URL中作为参数值的中文字符等会被编码

  1、处理编码思路:

        注意:[在浏览器上访问时,每个空格会被转码为 %20 ,URLencode会将每个空格转码为 + ]

            URLEncode的转码会将一些不需要转码的字符也进行转码(例如不是参数值的& : /等)

        1.对于需要的参数先进行编码。(如果是get请求可以先使用URLEncode编码后进行URL的拼接)  

        2.对URL进行截取,然后统一编码,将特殊字符编码后替换回来(路径中的&   /  : 当其作为参数值的时候需要转码,否

          则不能被转码);此方法弊端:当& 和 /  作为参数值时需要被转码,不好处理。

   2、一些常见字符被URLEncode转码后的值(中文字符会被转码为  以%E开头,长度为9的字符串)

      英文  ?  编码后  : %3F
               /  编码后:%2F
              % 编码后:%25
      中文? 编码后:%EF%BC%9F
      单个空格   编码后:+ (在浏览器上访问时,每个空格会被转码为 %20 ,URLencode会将

              每个空格转码为 +;可以转码后将其中的  +  用  %20替换掉 )       

        + 编码后:%2B
      英文 编码后:%3A
      中文 : 编码后:%EF%BC%9A
             & 编码后:%26

 3、简单的拼接demo(存在不足之处)

      

      public static void main(String[] args) {
		//被转码后的url
		String result = "";
		//需要转码的url
		String url = "https://www.baidu.com/s?wd=语 文 ?&rsv_spt=1"
				+ "&rsv_iqid=0xd13fd9040001fb1d&issp=1&f=8&rsv_bp=0"
				+ "&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=2"
				+ "&rsv_sug1=2&rsv_sug7=101&rsv_sug2=0&inputT=774&rsv_sug4=1367  &AAAA=1";
		int index = url.indexOf("?");
		result = url.substring(0,index+1);
		String temp = url.substring(index+1);
		try {
			//URLEncode转码会将& : / = 等一些特殊字符转码,(但是这个字符  只有在作为参数值  时需要转码;例如url中的&具有参数连接的作用,此时就不能被转码)
			String encode = URLEncoder.encode(temp, "utf-8");
			System.out.println(encode);
			encode = encode.replace("%3D",  "=");
			encode = encode.replace("%2F", "/");
			encode = encode.replace("+", "%20");
			encode = encode.replace("%26", "&");
			result += encode;
			System.out.println("转码后的url:"+result);
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
	}

  编码前地址:http://hi.baidu.com/test/?a=张三&b=_a123&c=+abc

  编码后地址:http://hi.baidu.com/test/?a=%E5%BC%A0%E4%B8%89&b=_a123&c=+abc  (中文字符已被转码)

  字符对应的值:

    /  →  47  a-z →  97~122  A-Z  →  65~90  :  →  58  %  → 37 

  中文字符对应的值是大于255的 

  char c = ‘我‘;

  System.out.println((int)c)   / /可以查看对应的数值 

在字符编码方面,ASCII码为标准符号、数字、英文等进行了保留,取值范围是0~127,还有一部分作为扩展ASCII码128~255

当操作系统采用非ASCII编码时(比如汉字编码),一般用扩展ASCII码来进行,约定用128~255范围的编码连续2~3甚至4个来进

行汉字编码,(比如国标用连续两个128~255的编码表示1个汉字,分别是区码和位码的编码;UTF-8可以用3个连续的数来表示一

个汉字),具体编码规则要看具体定义,一般不相同的。因此,在处理字符串时,如果是有符号字符串,遇到小于0的字符,会结合

后面紧跟的字符来组成一个汉字,大于0的为标准西文字符;如果是无符号的,则可以判断是否大于127。

				
时间: 2024-10-11 08:34:15

Http请求时URL中的中文编码的相关文章

Android中访问网络时url中带有特殊字符的问题

Component Example value Also known as Protocol http scheme Authority username:[email protected]:8080   User Info username:password   Host host   Port 8080   File /directory/file?query   Path /directory/file   Query query   Ref ref fragment 一个完整的url链接

记一次400错误引发的血案(URL中特殊符号的转义/400 bad request错误)

django+nginx+uwsgi部署的站点访问某个URL时发生了400 bad request的错误,而使用django自带的开发版的web server时没有遇到此问题.初步判断是nginx或uwsgi配置问题. 网上有说是因为request header过大而nginx配置的client_header_buffer_size和large_client_header_buffers过小引起的,但就当前的状态来看感觉不太可能.因为request header并不是特别大.至于是别的什么原因还

IE内核发送ajax请求时不会将url中的参数编码

有一次用户遇到创建文件,名称为中文时乱码的问题. 经调查,发现用户使用的是国产浏览器ie模式 抓取请求发现 IE: 键 值请求 POST /Handlers/CreateTxtFile.ashx?filename=阿斯达是.txt HTTP/1.1Accept */*Content-Type application/x-www-form-urlencoded; charset=UTF-8X-Requested-With XMLHttpRequestReferer http://mt.sogou.

post可以直接把get请求代入到目标url中

Feigong --非攻 非攻 取自<秦时明月>--非攻,针对不同情况自由变化的武器 Feigong,针对各种情况自由变化的mysql注入脚本 Feigong,In view of the different things freely change the mysql injection script 什么是非攻? 在sqlmap的使用过程中,常常碰到很普通的绕过过滤方式,例如空格-->%0b.%0a,但是却没办法使用sqlmap来获取数据的情况,于是花了很长时间来完善脚本,让非攻可以

允许asp.net MVC报 错说明: 访问服务此请求所需的资源时出错。服务器可能未配置为访问所请求的 URL。错误消息 401.2。: 未经授权

运行mvc3程序报以下错误详细报错如下: "/"应用程序中的服务器错误. 访问被拒绝. 说明: 访问服务此请求所需的资源时出错.服务器可能未配置为访问所请求的 URL. 错误消息 401.2.: 未经授权: 服务器配置导致登录失败.请验证您是否有权基于您提供的凭据和 Web 服务器上启用的身份验证方法查看此目录或页.请与 Web 服务器的管理员联系以获得其他帮助. 版本信息: Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.3

使用Curl进行抓取远程内容时url中文编码问题 转载

PHP中对于URL进行编码,可以使用 urlencode() 或者 rawurlencode(),二者的区别是前者把空格编码为 '+',而后者把空格编码为 '%20',不过应该注意的是,在编码时应该只对部分URL编码,否则URL中的冒号和反斜杠也会被转义.下面是详细解释: string urlencode( string str) 返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+). 例子 1 :urlencode函数与

解决JS在url中传递参数时参数包含中文乱码的问题

需要经过两次encodeURI()编码和两次decodeURI()解码, 使用encodeURI()编码时, var searchType = $("#type_select option:selected").val();//"基地动态" var searchContent = $("#search_val").val();//"aaaa" var url = encodeURI("TextSearchDetail

Extjs4.2 ajax请求url中传中文參数乱码问题

今天有个需求须要在url中传入中文參数.结果在后台取得时出现乱码,怀疑可能是编码问题.上网查询了资料,试了几种办法.发现有一种可行,记录在此,以便查阅. url中用encodeURI 进行2次编码: Ext.Ajax.request({ url:"updateadminuser.do?"+userid+"&uname="+encodeURI(encodeURI(uname)), success:function (response) { store.load

为什么本地开发时使用CURL请求本地URL会卡死

^_^是在WIN下开发.配置是nignxphp mysql 默认时启动phpcgi是 D:\php \php-cgi.exe-b 127.0.0.1:9000 -c D:\phpfind\phpa\php.ini 先看NGINX配置        location ~ \.php(.*)$  {            fastcgi_pass   127.0.0.1:9000;            fastcgi_index  index.php;            fastcgi_spl