URL参数乱码问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了URL参数乱码问题相关的知识,希望对你有一定的参考价值。

链接地址:lv_ssologin.jsp?user_info=4TSjN5Ve09Twvk%2B%2BhnXxndxSyWEIlKoh
参数获取:String userInfo = request.getParameter("user_info") == null ? "" : new String(request.getParameter("user_info").getBytes("ISO-8859-1"), "UTF-8");
但是实际的值是:4TSjN5Ve09Twvk++hnXxndxSyWEIlKoh

// Servlet啥的,会对URL参数encode,用的时候decode一下就好了。
import java.net.URLDecoder;

public class U 

public static void main(String[] args) throws Exception 
String param = "4TSjN5Ve09Twvk%2B%2BhnXxndxSyWEIlKoh";
System.out.println(URLDecoder.decode(param, "UTF-8"));
// Console :
//    4TSjN5Ve09Twvk++hnXxndxSyWEIlKoh



// 具体规则我忘记了,上网查了一下。
//    1.字符"a"-"z","A"-"Z","0"-"9",".","-","*",和"_" 都不会被编码;
//  2.将空格转换为加号 (+) ;
//  3.将非文本内容转换成"%xy"的形式,xy是两位16进制的数值;
//  4.在每个 name=value 对之间放置 & 符号。
参考技术A String urlDeCode = URLDecoder.decode(userInfo,"UTF-8");追问

不行,结果成这样了:4TSjN5Ve09Twvk hnXxnbqQ633BwgCB

url中文参数乱码问题

1、问题:

  web项目里url的中文参数乱码

 

2、解决:

(1)前台:encodeURI(encodeURI(code))
(2)后台:URLDecoder.decode(new String(code.getBytes("iso-8859-1"),"utf-8"), "utf-8")

 

3、疑问:

  (1)为什么前台需要编码两次?

    因为request.getParameter(String)会进行一次URI的解码过程,调用内置的解码过程会导致乱码

    而编码两次可以保证内置的解码过程执行后的结果是编码一次的结果(如果直接是中文会导致无法显示而乱码)

  (2)后台为什么要首先以[iso-8859-1]读一次编码?

    tomcat7的默认编码是[iso-8859-1],tomcat8的默认编码是[utf-8]

    需要以[iso-8859-1]读取字节码,再以[utf-8]构造成子串,再使用[utf-8]解码一次,即可得到中文在程序里使用

 

4、扩展:

  其它方法:(没有试验)

  (1)根据tomcat的版本不同可以设置tomcat安装目录下的[conf/server.cml]文件的connector配置

  (2)在程序重写获取参数的方法

 

5、参考文章

          js/java 页面url传值中文编码&解码问题

  encodeURI(encodeURI(code))

  url出现中文乱码

 

以上是关于URL参数乱码问题的主要内容,如果未能解决你的问题,请参考以下文章

url 乱码

解决URL带中文参数乱码问题

url中文参数乱码问题

为啥jsp使用URL传中文参数会乱码

SSH环境 jsp url跳转,带中文参数乱码问题 高手请进,谢谢

url 传递中文参数乱码问题的终极解决方法。