为什么有时候要 encodeURI(url)两次才不会出现乱码
来源:互联网 发布:linux socket thread 编辑:程序博客网 时间:2024/04/27 23:42
参考下面网址所说,我发现我的其中一个网站 没有设置 request.setCharacterEncoding(***)
所以导致传递过来的东西乱码,需要encodeURI 两次。
后面,我在网站中加了
<!-- 编码过滤器 -->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
用encodeURIComponent一次即可搞定。 前台解码时用 decodeURIComponent
参考:http://bbs.csdn.net/topics/330072196
一般情况下, 发送 encodeURIComponent(parmeName)+"="+encodeURIComponent(parmeValue);
接收时, 直接 String paramValue = request.getParameter(paramName); // 容器自动解码.
我们知道 encodeURIComponent 使用的是 UTF-8 编码规则来编的.
如果 request.getParameter(paramName) 时,容器也按 UTF-8 解的话,是正确的. 根本无须在客户端
进行二次的 encodeURIComponent(...)
如果 request.getParameter(paramName),容器没有按 UTF-8 解的话, 结果只有一个,就是乱码!
容器按什么编码来解码,决定于 request.setCharacterEncoding(***) 或者 服务器程序配置.
如果你在 jsp 程序中,能够 request.setCharacterEncoding("UTF-8"), 并且 修改服务器配置,让容器在解 GET 提交的参数时,使用 UTF-8.
客户端提交前不用二次编码, 接收时,也只要直接 request.getParameter(paramName) 即可
---------------------
为什么网上会有人提出在客户端对字符串重复编码两次呢.
如果因为项目需要,不能指定容器使用何种编码规则来解码提交的参数, 比如:需要接收来自不同页面,不地编码的参数内容时。 (又或者是开发人员被这有点复杂的东东搞得晕头转向,不懂得如何正确的去做好这接收参数的工作)
这个时候,在客户端对参数进行二次编码,可以有效的避开“提交多字节字符”的这个棘手问题。
因为第一次编码,你的参数内容便不带有多字节字符了,成了纯粹的 Ascii 字符串。(这里把编第一次的结果叫成 [STR_ENC1] 好了。[STR_ENC1] 是不带有多字节字符的)
再编一次后,提交,接收时容器自动解一次 (容器自动解的这一次,不管是按 GBK 还是 UTF-8 还是 ISO-8859-1 都好,都能够正确的得到 [STR_ENC1])
然后,再在程序中实现一次 decodeURIComponent (Java中通常使用 java.net.URLDecoder(***, "UTF-8")) 就可以得到想提交的参数的原值。
- 为什么有时候要 encodeURI(url)两次才不会出现乱码
- 为什么要encodeURI(url)两次才不会出现乱码
- JS为什么有时候要做两次encodeURI
- JS为什么有时候要做两次encodeURI
- 为什么要两次调用encodeURI来解决乱码问题
- encodeURI为什么要用两次
- encodeURI为什么要用两次
- encodeURI为什么要用两次
- encodeURI为什么要用两次
- 为什么前端页面encodeURI(url)两次,可以避免后台中文字符乱码
- 为什么需要JS里常需要做两次encodeURI(url)
- 为什么中文需要2次encodeURI(url)才能保证不出现乱码
- get请求中文乱码,思考为什么要用两次的encodeURI()
- encodeURI来解决URL传递时为什么需要进行两次encodeURI编码
- encodeURI来解决URL传递时为什么需要进行两次encodeURI编码
- encodeURI来解决URL传递时为什么需要进行两次encodeURI编码
- URL编码与两次encodeURI
- URL编码与两次encodeURI
- Android数据保存之SharedPreference
- 关于运行时,获取私有变量和私有方法
- android开发教程:android调用activity简单方法
- 卖猪
- Android Studio常用快捷键
- 为什么有时候要 encodeURI(url)两次才不会出现乱码
- 栈帧详解
- Mybatis自动生成代码
- Android 中//此句无响应 HttpResponse httpResponse = httpClient.execute(post);
- gcc 命令
- http status
- Python文件夹与文件的操作
- checkbox的disabled属性
- Maven执行指定的测试类或方法