jsp url get ISO-8859-1 request.getParameter 乱码解决方法

本文详细介绍了如何在Tomcat的server.xml中配置URIEncoding来解决AJAX请求中文参数乱码的问题,并通过示例代码说明了在不同场景下解决乱码的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1: 在tomcat的 server.xml里面的connecter里面加上一句 URIEncoding="utf-8" (根据条件而定):

<Connector URIEncoding="gbk" port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"URIEncoding="utf-8"/>

2:String name= new String(request.getParameter("name").getBytes( "ISO8859-1"),UTF-8");

3: 将参数写成 java.net.URLEncoder.encode(sContent,"gb2312")后再传递。

比如url是"/accept.do?content=<%=java.net.URLEncoder.encode(sContent,"UTF-8")%>";

读取时,使用

String sc = new String(request.getParameter("content").getBytes("iso-8859-1"),"UTF-8");

如果还未成功,看看在tomcat的server.xml里面的connecter里面加URIEncoding 。//字符集过虑

<filter>

<filter-name>encodingFilter </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>

<init-param>

<param-name>forceEncoding </param-name>

<param-value>true </param-value>

</init-param>

</filter>

4.

情况之一:没有编码URL

HTML 页面

var url = "./SuggestServlet?tagName="+document.getElementById('tagName').value;

做一个AJAX请求到SuggestServlet,参数是中文字符串,(传递到容器,由容器决定采用何种编码解析

到Servlet之后取这个参数 String myparam = request.getParameter("tagName");

得到的是一个乱码字符串,request.getCharacterEncoding() 得到的是一个null值,这时候tomcat默认的是ISO-8859-1编码解析,这就是我们得到乱码的原因了。

解决办法:

myparam = new String(myparam.getBytes("ISO-8859-1"),"UTF-8"); 这样就能得到中文了

情况之二:使用javascript的encodeURI编码中文参数

HTML页面

var url = "./SuggestServlet?tagName="+encodeURI(document.getElementById('tagName').value);

同样是做一个AJAX请求到SuggestServlet,这时候参数被编码过了

到Servlet之后取这个参数 String myparam = request.getParameter("tagName");

得到的是UTF-8编码之后的字符串,其实不是乱码。

要获得中文字符,我们还需要再转换一次编码

String decodingParam =URLDecoder.decode(myparam, "UTF-8");

<think>嗯,用户现在遇到了一个问题,就是在使用JSP获取浏览器地址栏中的中文参数时出现乱码。之前已经给过解决方案,现在用户再次提问,可能是在实际操作中遇到了困难,或者之前的步骤没有完全解决问题。需要仔细分析用户当前的问题,看看是否有遗漏的地方。 首先,用户提供的代码是`'<%=request.getParameter("sponsorName")%>'`,这说明他们直接在JSP页面中使用request.getParameter获取参数,而没有进行编码处理。根据之前的回答,用户可能没有正确配置Tomcat的URI编码,或者前端没有正确编码参数。 接下来要考虑用户可能的场景。用户可能是在开发一个使用MiniUI的JSP应用,通过URL传递中文参数,但后端获取时出现乱码。这种情况常见于GET请求,因为POST请求通常可以通过设置字符编码来处理,而GET请求的参数在URL中,处理方式不同。 用户之前可能已经尝试了前端编码和Tomcat配置,但依然有问题,或者可能没有正确执行这些步骤。例如,可能忘记重启Tomcat,或者过滤器配置不正确。另外,用户可能在使用MiniUI的Ajax请求时,没有正确设置contentType,导致编码问题。 需要检查用户是否完成了所有步骤:前端是否正确使用encodeURIComponent,Tomcat的server.xml是否配置了URIEncoding为UTF-8,是否有添加字符编码过滤器,JSP页面头部是否有设置UTF-8,以及MiniUI的Ajax请求是否设置了正确的contentType。 另外,用户可能没有意识到不同浏览器的编码方式可能有差异,或者服务器端的默认编码不是UTF-8。还有可能在获取参数后没有进行手动转码,特别是在没有使用过滤器的情况下,可能需要手动将参数从ISO-8859-1转换为UTF-8。 还要考虑用户是否在多个环节中出现了问题。例如,前端编码正确,但Tomcat配置没有生效,或者过滤器虽然配置了,但被其他配置覆盖了。此外,可能需要检查服务器的版本,某些旧版本的Tomcat可能需要不同的配置方式。 最后,用户可能需要一个更简洁的解决方案,或者分步骤的验证方法,来逐步排查问题所在。例如,先确认前端编码是否正确,再检查Tomcat配置,然后测试后端获取参数的方式,最后处理MiniUI的特殊情况。</think>在JSP中通过`request.getParameter("sponsorName")`获取URL中文参数乱码解决方案如下(按优先级排序): --- ### 一、强制解码(应急方案) 直接在取值时进行ISO-8859-1到UTF-8的字节转换: ```jsp <% String sponsorName = new String( request.getParameter("sponsorName").getBytes("ISO-8859-1"), "UTF-8" ); %> <%= sponsorName %> ``` --- ### 二、Tomcat配置(根本解决方案) 1. 打开`conf/server.xml` 2. 找到HTTP连接器配置段: ```xml <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/> <!-- 关键参数 --> ``` 3. 重启Tomcat服务 --- ### 三、前端编码规范 发送请求前必须对中文进行两次编码: ```javascript // JavaScript示例(GET请求) let param = encodeURIComponent(encodeURIComponent("中文参数")); location.href = "page.jsp?sponsorName=" + param; ``` --- ### 四、服务端过滤器(通用解决方案) 1. 创建`EncodingFilter.java`: ```java public class EncodingFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { req.setCharacterEncoding("UTF-8"); res.setCharacterEncoding("UTF-8"); chain.doFilter(req, res); } } ``` 2. 在`web.xml`中配置: ```xml <filter> <filter-name>encodingFilter</filter-name> <filter-class>com.yourpackage.EncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` --- ### 五、JSP页面声明 确保所有JSP页面顶部有: ```jsp <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8"%> ``` --- ### 六、浏览器调试验证 通过浏览器开发者工具检查: 1. 网络请求中查看实际发送的URL参数是否为`%E4%B8%AD%E6%96%87`形式 2. 确认Response Headers包含`Content-Type: text/html;charset=UTF-8` --- ### 不同场景处理建议 | 场景 | 解决方案组合 | |---------------------|------------------------------| | 临时快速修复 | 方案一 + 方案三 | | 全新项目部署 | 方案二 + 方案四 + 方案五 | | 第三方服务器环境 | 方案一 + 方案三 + 方案四 | --- 通过以上方法组合使用,可彻底解决URL中文参数乱码问题。建议优先采用**Tomcat配置+前端双重编码**的方案,这是最稳定的解决方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值