<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/encodingPro/Recieve" method="get">
<table>
<tr>
<td><input type="text" name="userName"/></td>
<td><input type="submit" value="提交"/></td>
</tr>
</table>
</form>
</body>
</html>
这是我的HTML代码
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println(request.getCharacterEncoding());
//接受数据打印在控制台
System.out.println(request.getParameter("userName"));
System.out.println(request.getQueryString());
//接受数据打印在页面
PrintWriter writer=response.getWriter();
writer.write(request.getParameter("userName"));
writer.write(request.getQueryString());
/*
* 用GET方法提交,在不先設定任何转码code的情况下,打印在页面的不正常(query正常)!打印在控制台都正常
*/
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//接受数据打印在控制台
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
System.out.println(request.getCharacterEncoding());
System.out.println(request.getParameter("userName"));
//System.out.println(request.getQueryString());
//接受数据打印在页面
PrintWriter writer=response.getWriter();
writer.write(request.getParameter("userName"));
//writer.write(request.getQueryString());
/*
* 用POST方法提交,在不先設定任何转码code的情况下,打印在页面的正常!打印在控制台乱码
*/
}
这是servlet代码,为什么我用GET方法不进行任何设置,打印在控制台的中问就不会出现乱码,而POST一定要设置request.setCharacterEncoding(),才不会出现乱码
13 个解决方案
#1
PS:jdk是1.8 Tomcat服务器是8.0 IDE是eclipse
#2
首先确定 tomcat 中编码格式 UTF-8 设置没问题 其次页面编码也要设置utf-8
还有框架也可设置编码拦截器
还有框架也可设置编码拦截器
#3
我在HTML页面中设置了charset为utf-8啊,现在的问题是我在什么都没有设置的情况下,用post打印在控制台上就不正常,而用get方法打印在控制台上就正常。
request.setCharacterEncoding("UTF-8");
在POST方法下,使用上面的代码,确实可以在控制台打印正确,但是在GET方法下,即使不用网上普遍说的那种转码方式,也可以打印正常
#4
tomcat 编码设置了没?<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" /> 加入conf 下的server.xml中
#5
tomcat 编码设置了没?<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" /> 加入conf 下的server.xml中
首先确定 tomcat 中编码格式 UTF-8 设置没问题 其次页面编码也要设置utf-8
还有框架也可设置编码拦截器
我在HTML页面中设置了charset为utf-8啊,现在的问题是我在什么都没有设置的情况下,用post打印在控制台上就不正常,而用get方法打印在控制台上就正常。request.setCharacterEncoding("UTF-8");
在POST方法下,使用上面的代码,确实可以在控制台打印正确,但是在GET方法下,即使不用网上普遍说的那种转码方式,也可以打印正常
看来是我没太让您明白我的意思,我现在遇到的麻烦是,我没有设置任何转码语句,使用GET方法提交表单,打印在控制台的中文是正常的,POST方法打印却不正常
#6
tomcat 编码设置了没?<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" /> 加入conf 下的server.xml中
首先确定 tomcat 中编码格式 UTF-8 设置没问题 其次页面编码也要设置utf-8
还有框架也可设置编码拦截器
我在HTML页面中设置了charset为utf-8啊,现在的问题是我在什么都没有设置的情况下,用post打印在控制台上就不正常,而用get方法打印在控制台上就正常。request.setCharacterEncoding("UTF-8");
在POST方法下,使用上面的代码,确实可以在控制台打印正确,但是在GET方法下,即使不用网上普遍说的那种转码方式,也可以打印正常
看来是我没太让您明白我的意思,我现在遇到的麻烦是,我没有设置任何转码语句,使用GET方法提交表单,打印在控制台的中文是正常的,POST方法打印却不正常
我可没理解错,首先你要了解 get 和post的区别 post是数据包形式 get是紧跟在url后的传参,你说的get不乱 post乱 问题就在这里 传输方式不同
#7
建议最好做一个filter,统一的设置一下编码
#8
建议最好做一个filter,统一的设置一下编码,两种方式的传输方式不一样,导致一个经过了字符串编码传输处理,一个没有
#9
调用js方法encodeURI(url),将url编码
#10
跟lz遇到了类似的问题,因为网上很多都是get 乱码,post不乱的,但是我也是get不乱,但post会乱
看了相关资料,post的解码方式就是要自己设置的,也就是lz写的request那个方法
至于get,按照参考资料,似乎也需要对其进行解码设置,否则是默认用iso-8859-1解码,那肯定会乱码,但实际操作是正常的
我在想会不会是tomcat版本的问题,高版本已经对此作了优化?打算用7.0的版本试一下
看了相关资料,post的解码方式就是要自己设置的,也就是lz写的request那个方法
至于get,按照参考资料,似乎也需要对其进行解码设置,否则是默认用iso-8859-1解码,那肯定会乱码,但实际操作是正常的
我在想会不会是tomcat版本的问题,高版本已经对此作了优化?打算用7.0的版本试一下
#11
如果用的maven插件启动
加上<uriEncoding>UTF-8</uriEncoding>
下面是样例
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<tomcatWebXml>src/main/webapp/WEB-INF/web2.xml</tomcatWebXml>
<port>8081</port>
<uriEncoding>UTF-8</uriEncoding>
<path>/</path>
</configuration>
</plugin>
</plugins>
加上<uriEncoding>UTF-8</uriEncoding>
下面是样例
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<tomcatWebXml>src/main/webapp/WEB-INF/web2.xml</tomcatWebXml>
<port>8081</port>
<uriEncoding>UTF-8</uriEncoding>
<path>/</path>
</configuration>
</plugin>
</plugins>
#12
看了下源码,应该是servlet帮忙解码的
注意看这里
因为url中的参数编码格式是固定的,所以servlet应该可以帮忙识别出来
public String getParameter(String name) {
if (!parametersParsed) {
parseParameters();
}
return coyoteRequest.getParameters().getParameter(name);
}
protected void parseParameters() {
parametersParsed = true;
Parameters parameters = coyoteRequest.getParameters();
boolean success = false;
try {
// Set this every time in case limit has been changed via JMX
parameters.setLimit(getConnector().getMaxParameterCount());
// getCharacterEncoding() may have been overridden to search for
// hidden form field containing request encoding
String enc = getCharacterEncoding();
boolean useBodyEncodingForURI = connector.getUseBodyEncodingForURI();
if (enc != null) {
parameters.setEncoding(enc);
if (useBodyEncodingForURI) {
parameters.setQueryStringEncoding(enc);
}
}
注意看这里
String enc = getCharacterEncoding();
因为url中的参数编码格式是固定的,所以servlet应该可以帮忙识别出来
#13
我用的是Tomcat8,换成Tomcat7即可
#1
PS:jdk是1.8 Tomcat服务器是8.0 IDE是eclipse
#2
首先确定 tomcat 中编码格式 UTF-8 设置没问题 其次页面编码也要设置utf-8
还有框架也可设置编码拦截器
还有框架也可设置编码拦截器
#3
首先确定 tomcat 中编码格式 UTF-8 设置没问题 其次页面编码也要设置utf-8
还有框架也可设置编码拦截器
我在HTML页面中设置了charset为utf-8啊,现在的问题是我在什么都没有设置的情况下,用post打印在控制台上就不正常,而用get方法打印在控制台上就正常。
request.setCharacterEncoding("UTF-8");
在POST方法下,使用上面的代码,确实可以在控制台打印正确,但是在GET方法下,即使不用网上普遍说的那种转码方式,也可以打印正常
#4
首先确定 tomcat 中编码格式 UTF-8 设置没问题 其次页面编码也要设置utf-8
还有框架也可设置编码拦截器
我在HTML页面中设置了charset为utf-8啊,现在的问题是我在什么都没有设置的情况下,用post打印在控制台上就不正常,而用get方法打印在控制台上就正常。request.setCharacterEncoding("UTF-8");
在POST方法下,使用上面的代码,确实可以在控制台打印正确,但是在GET方法下,即使不用网上普遍说的那种转码方式,也可以打印正常
#5
tomcat 编码设置了没?<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" /> 加入conf 下的server.xml中
首先确定 tomcat 中编码格式 UTF-8 设置没问题 其次页面编码也要设置utf-8
还有框架也可设置编码拦截器
我在HTML页面中设置了charset为utf-8啊,现在的问题是我在什么都没有设置的情况下,用post打印在控制台上就不正常,而用get方法打印在控制台上就正常。request.setCharacterEncoding("UTF-8");
在POST方法下,使用上面的代码,确实可以在控制台打印正确,但是在GET方法下,即使不用网上普遍说的那种转码方式,也可以打印正常
看来是我没太让您明白我的意思,我现在遇到的麻烦是,我没有设置任何转码语句,使用GET方法提交表单,打印在控制台的中文是正常的,POST方法打印却不正常
#6
tomcat 编码设置了没?<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" /> 加入conf 下的server.xml中
首先确定 tomcat 中编码格式 UTF-8 设置没问题 其次页面编码也要设置utf-8
还有框架也可设置编码拦截器
我在HTML页面中设置了charset为utf-8啊,现在的问题是我在什么都没有设置的情况下,用post打印在控制台上就不正常,而用get方法打印在控制台上就正常。request.setCharacterEncoding("UTF-8");
在POST方法下,使用上面的代码,确实可以在控制台打印正确,但是在GET方法下,即使不用网上普遍说的那种转码方式,也可以打印正常
看来是我没太让您明白我的意思,我现在遇到的麻烦是,我没有设置任何转码语句,使用GET方法提交表单,打印在控制台的中文是正常的,POST方法打印却不正常
我可没理解错,首先你要了解 get 和post的区别 post是数据包形式 get是紧跟在url后的传参,你说的get不乱 post乱 问题就在这里 传输方式不同
#7
建议最好做一个filter,统一的设置一下编码
#8
建议最好做一个filter,统一的设置一下编码,两种方式的传输方式不一样,导致一个经过了字符串编码传输处理,一个没有
#9
调用js方法encodeURI(url),将url编码
#10
跟lz遇到了类似的问题,因为网上很多都是get 乱码,post不乱的,但是我也是get不乱,但post会乱
看了相关资料,post的解码方式就是要自己设置的,也就是lz写的request那个方法
至于get,按照参考资料,似乎也需要对其进行解码设置,否则是默认用iso-8859-1解码,那肯定会乱码,但实际操作是正常的
我在想会不会是tomcat版本的问题,高版本已经对此作了优化?打算用7.0的版本试一下
看了相关资料,post的解码方式就是要自己设置的,也就是lz写的request那个方法
至于get,按照参考资料,似乎也需要对其进行解码设置,否则是默认用iso-8859-1解码,那肯定会乱码,但实际操作是正常的
我在想会不会是tomcat版本的问题,高版本已经对此作了优化?打算用7.0的版本试一下
#11
如果用的maven插件启动
加上<uriEncoding>UTF-8</uriEncoding>
下面是样例
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<tomcatWebXml>src/main/webapp/WEB-INF/web2.xml</tomcatWebXml>
<port>8081</port>
<uriEncoding>UTF-8</uriEncoding>
<path>/</path>
</configuration>
</plugin>
</plugins>
加上<uriEncoding>UTF-8</uriEncoding>
下面是样例
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<tomcatWebXml>src/main/webapp/WEB-INF/web2.xml</tomcatWebXml>
<port>8081</port>
<uriEncoding>UTF-8</uriEncoding>
<path>/</path>
</configuration>
</plugin>
</plugins>
#12
看了下源码,应该是servlet帮忙解码的
注意看这里
因为url中的参数编码格式是固定的,所以servlet应该可以帮忙识别出来
public String getParameter(String name) {
if (!parametersParsed) {
parseParameters();
}
return coyoteRequest.getParameters().getParameter(name);
}
protected void parseParameters() {
parametersParsed = true;
Parameters parameters = coyoteRequest.getParameters();
boolean success = false;
try {
// Set this every time in case limit has been changed via JMX
parameters.setLimit(getConnector().getMaxParameterCount());
// getCharacterEncoding() may have been overridden to search for
// hidden form field containing request encoding
String enc = getCharacterEncoding();
boolean useBodyEncodingForURI = connector.getUseBodyEncodingForURI();
if (enc != null) {
parameters.setEncoding(enc);
if (useBodyEncodingForURI) {
parameters.setQueryStringEncoding(enc);
}
}
注意看这里
String enc = getCharacterEncoding();
因为url中的参数编码格式是固定的,所以servlet应该可以帮忙识别出来
#13
我用的是Tomcat8,换成Tomcat7即可