JS 传值到jsp 中文字符乱码

本文解决在实际开发中遇到的JS文件向JSP页面传递中文字符时出现乱码的问题。通过两次使用encodeURI对中文字符进行编码,再在接收端使用URLDecoder.decode进行解码,最终成功解决乱码问题。
在实际开发中碰到一个非常头痛的问题,在js文件中向jsp页面传中文字符时碰见了一个字符乱码(get传递方式)。在传值时使用encodeURI进行了编码,然后再接收端(jsp)使用了URLDecoder.decode('','字符编码'),进行解码但还是有字符乱码问题。

   解决办法,对传递中文字符的参数进行两次的的编码encodeURI(encodeURI("")),就OK!.

  进行两次encodeURI的原因

   因为Tomcat服务器会自动帮你做一次URLDecode,所以再加上你自己在代码里面写的URLDecode,一共就是两个Decode了,既然要两次Decode,当然就需要两次Encode了。或许你会问,干脆只Encode一次,然后在java代码里不Decode,呵呵,这个也是不行的,这其实也就是为什么要进行Encode的原因吧

### JSP 前端 URL 乱码解决方案 在 JSP 开发中,URL 出现乱码的问题通常与编码设置不一致有关。以下是针对该问题的详细解决方案。 #### 1. 使用 JavaScript 对 URL 参数进行编码 当通过 URL 递参数时,如果参数包含中文或其他非 ASCII 字符,可以使用 `encodeURIComponent()` 函数对参数进行编码[^2]。 ```javascript var user_name = "张三"; var url = 'web/comm?user_name=' + encodeURIComponent(user_name); ``` 上述代码确保了 `user_name` 参数被正确编码为 URL 安全格式,避免直接递未编码的中文字符导致乱码。 #### 2. 确保 JSP 页面的字符集声明正确 在 JSP 页面中,需要明确指定页面的字符集为 UTF-8,以确保浏览器能够正确解析入的参数。 ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> ``` 上述代码设置了 JSP 页面的内容类型和字符集为 UTF-8,从而避免因字符集不匹配导致的乱码问题[^4]。 #### 3. 设置请求和响应的编码格式 在处理请求和响应时,确保服务器端能够正确处理 UTF-8 编码的数据。可以通过以下代码设置请求和响应的字符编码: ```java request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); ``` 上述代码确保了请求和响应均使用 UTF-8 编码,从而避免乱码问题[^1]。 #### 4. 配置 Tomcat 容器解决 GET 请求乱码 如果在使用 Tomcat 容器时,GET 请求仍然出现乱码问题,可能是由于 Tomcat 默认未正确配置 URI 编码。可以在 `server.xml` 文件中添加以下配置: ```xml <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/> ``` 上述配置确保 Tomcat 容器在处理 URI 时使用 UTF-8 编码,从而解决 GET 请求中的乱码问题[^3]。 #### 5. 后端解码处理 在后端接收到 URL 参数后,可能需要对其进行解码操作。以下是一个 Java 示例: ```java if (values.isNotEmpty("user_name")) { String user_name = values.getStr("user_name"); try { user_name = URLDecoder.decode(user_name, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } values.add("user_name", user_name); } ``` 上述代码中,`URLDecoder.decode()` 函数将参数从 UTF-8 编码格式解码为原始字符串[^1]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值