关于get和post请求中文乱码的解决办法

本文介绍了解决Web项目中中文乱码问题的方法,包括设置表单提交方式为POST、修改Tomcat配置文件以改变默认字符编码及通过字节转换处理GET请求。

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

web项目中经常遇到中文乱码问题,本文简单记录遇到中文乱码问题时的解决方案,代码如下:

<form class="form-horizontal" role="form" action="${pageContext.request.contextPath}/addProductType.do" >
	<div class="modal-header">
		<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
		<h4 class="modal-title" id="proAddLabel">产品类型添加</h4>
	</div>
	<div class="modal-body">
		<div class="form-group">
			<label for="productName4Add" class="col-lg-2 control-label">类型名称</label>
			<div class="col-lg-10">
				<input type="text" class="form-control" id="productName4Add" name = "productTypeName" placeholder="类型名称">
			</div>
		</div>
	</div>
	<div class="modal-footer">
		<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
		<input type="submit" class="btn btn-primary" value="添加" />
	</div>
</form>

我们可以看到这是一段典型的form表单提交的代码,在后台中我们通过request请求获取输入框内的值,这时输入中文字符后出现乱码。(在查找问题之前,先确保eclipse的字符集和jsp页面的字符编码均为utf-8)

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

eclipse检查方式window>preferences>General>Workspace。

确保无误后进行下面的操作,我们首先想到的是在通过request对象获取参数前,设置utf-8编码

request.setCharacterEncoding("utf-8");
String typeName=request.getParameter("productTypeName");
尝试后乱码问题依然存在,随后在form表单中加上method="post"后问题解决。
<form class="form-horizontal" role="form" action="${pageContext.request.contextPath}/addProductType.do"  method="post">
问题总结如下:

先前form表单中没有设置提交请求的方式,默认为get请求,使用get请求时,请求参数回被附加在url地址后并传给服务器,tomcat会先自动解析get请求传送过来的url字符

串(暂时先这么理解,后续有进一步了解后会对本片进行更新),而tomcat对网络请求处理时的默认字符集是ISO8859-1,这种情况下必定是会出现乱码的。

当form表单提交请求方式为post时,在获取request中的参数前加上request.setCharacterEncoding("utf-8")可以有效解决乱码问题。

request.setCharacterEncoding("utf-8");
String typeName=request.getParameter("productTypeName");

那么对于get请求,我们如何避免中文字符乱码呢?我们可以在tomcat的配置文件中进行字符编码的修改,tomcat安装目录>conf>server.xml中找到下面这行标签

<Connector port="8080" protocol="HTTP/1.1"   connectionTimeout="20000"   redirectPort="8443" />
在这个标签中加上URIEcoding="UTF-8"即修改默认字符编码为utf-8。

<Connector port="8080" protocol="HTTP/1.1"   connectionTimeout="20000"   redirectPort="8443"  URIEcoding="UTF-8" />

除了上述方法,还可以吧原有的参数拆分成byte数组后再通过该数组生成指定编码的String,这是一个万能的方法

String productTypeName=request.getParameter("productTypeName");
byte[] bytes=str.getBytes("ISO-8859-1");
productTypeName=newString(bytes,"utf-8");



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值