中文参数传到后台乱码

参数:苏JF6772含中文,是GET请求,后台接收时乱码,通过在tomcat中加一个配置就OK啦:



问题本质是get方式传递的参数内容默认编码方式问ISO8859-1,而且使用request.setCharacterEncoding("utf-8")也无法解决问题。
方法一就是修改tomcat服务器的配置文件server.xml
方法二前台用代码转String usernameString = new String(username.getBytes("ISO-8859-1"),"UTF-8");
以上属于request乱码问题,request请求分为post和get,对于不同的请求方式有不同的解决乱码的方案
至于POST请求,用request.setCharacterEncoding("utf-8"),request.setCharacterEncoding()只对post请求有效
下面说说response乱码:
response.setContentType("text/html;charset=UTF-8"); 目的是为了控制浏览器的行为,即控制浏览器用UTF-8进行解码;
response.setCharacterEncoding("UTF-8");目的是用于response.getWriter()输出的字符流的乱码问题。如果是response.getOutputStream()是不需要此种解决方案的,因为这句话的意思是为了将response对象中的数据以UTF-8解码后的字节流发向浏览器;

再补充:

浏览器调用jsp,html等页面中文显示乱码
此情况需满足两个要求:
1.文件本身是以utf-8编辑保存的(myEclipse中在properties中鼠标右键选择utf-8)
2.浏览器用utf-8解析:
(手动)-->在浏览器中右键选择编码格式为utf-8
(智能)-->在文件中写入如: <meta name="content-type" content="text/html; charset=UTF-8">  通过<meta>标签模拟response头,起到告诉浏览器用utf-8的编码解析
(智能)-->response.setContentType("text/html;charset=UTF-8");起到告诉浏览器用utf-8的编码解析
常用:
<meta name="content-type" content="text/html; charset=UTF-8">或<meta charset="utf-8">
<%@ pageEncoding="utf-8"%>
<?xml encoding="UTF-8"?>

### JSP页面传递中文参数后台出现乱码的解决方案 在JSP页面中传递中文参数时,可能会遇到中文字符在后台接收到后显示为乱码的问题。这种问题通常出现在使用GET请求传递URL参数或者通过AJAX请求传递数据的情况下。以下是几种常见的解决方法: #### 1. 修改Tomcat配置文件 对于GET请求中的中文参数乱码问题,可以通过修改Tomcat服务器的`server.xml`配置文件来解决。具体做法是在`<Connector>`标签中添加`URIEncoding="UTF-8"`属性,以确保Tomcat能够正确解析URL中的中文字符。 ```xml <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/> ``` 此设置确保了Tomcat在处理HTTP请求时使用UTF-8编码来解码URL参数,从而避免了中文字符的乱码问题[^3]。 #### 2. 在后台进行手动转码 如果无法修改Tomcat的配置文件,也可以在后台代码中对获取到的参数进行手动转码。例如,在Java中可以使用以下方式将ISO-8859-1编码的字符串转换为UTF-8编码: ```java try { String str = new String(investors.getInvestors_name().getBytes("iso8859-1"), "utf-8"); System.out.println("investors_name=" + str + "======"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } ``` 这种方法适用于那些无法直接修改服务器配置的情况,通过编程的方式解决了中文字符的乱码问题[^3]。 #### 3. 使用URL编码 在前端发送GET请求之前,可以先对URL中的中文参数进行URL编码。这样做的目的是为了确保这些参数能够在传输过程中保持其原始含义,不会因为编码不一致而导致乱码。在JavaScript中,可以使用`encodeURIComponent()`函数来进行编码: ```html <a href="myjsp.jsp?name=<%=java.net.URLEncoder.encode("张三", "utf-8")%>&tel=123456">点击传值</a> ``` 这段代码展示了如何在JSP页面中使用Java内置的`URLEncoder`类对中文字符串进行编码,确保了参数在传输过程中的正确性[^4]。 #### 4. AJAX请求中的中文乱码处理 对于使用jQuery或其他JavaScript框架发起的AJAX请求,可以通过设置请求头中的`Content-Type`字段为`application/x-www-form-urlencoded; charset=UTF-8`来指定请求体的编码格式。这有助于确保服务器端能够正确解析接收到的数据。 ```javascript $.ajax({ url: 'yourServlet', type: 'POST', contentType: 'application/x-www-form-urlencoded; charset=UTF-8', data: { name: '张三', tel: '123456' }, success: function(response) { console.log(response); } }); ``` 以上代码示例展示了如何在jQuery的AJAX请求中设置正确的编码格式,以防止中文字符在传输过程中出现乱码[^5]。 综上所述,解决JSP页面传递中文参数后台出现乱码的问题有多种方法,可以根据实际情况选择最适合的方法来实施。无论是通过修改服务器配置、在后台进行手动转码、使用URL编码还是处理AJAX请求中的中文乱码,都有助于确保数据在传输过程中的完整性与准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZHOU_VIP

您的鼓励将是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值