已设置request.setCharacterEncoding("UTF-8")仍无法获取带重音字符参数的解决办法
解决Request获取带重音符号参数的问题
首先要明确请求方式是POST还是GET,两种场景的处理逻辑不同:
POST 请求处理
request.setCharacterEncoding("UTF-8")必须在第一次获取任何参数之前调用,否则不会生效。如果调用时机正确但仍失败,检查:- 前端表单是否设置了
accept-charset="UTF-8",确保表单提交时的编码为UTF-8; - 项目框架是否有自动编码配置,比如Spring MVC的过滤器,需确保框架编码也统一为UTF-8。
- 前端表单是否设置了
GET 请求处理
request.setCharacterEncoding("UTF-8") 对GET请求无效,因为GET参数通过URL传递,编码由服务器的URI编码配置决定:
- 若使用Tomcat服务器,修改
conf/server.xml中的Connector节点,添加URIEncoding="UTF-8"属性:<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/> - 若无法修改服务器配置,可手动对参数转码:
注:大部分容器默认用ISO-8859-1编码URL参数,若你的容器默认编码不同,需替换对应编码值。String rawParam = request.getParameter("targetParam"); String decodedParam = new String(rawParam.getBytes("ISO-8859-1"), "UTF-8");
通用排查点
- 确认AJAX请求是否设置了
contentType: "application/x-www-form-urlencoded; charset=UTF-8"; - 检查整个请求链路的编码一致性,从前端传参、服务器接收,到后续业务处理,全部统一使用UTF-8编码。
内容的提问来源于stack exchange,提问作者Ngô Phúc Trường
相关产品推荐
相关产品推荐

