从一个html页面中取的参数时老是出现乱码!但是java文件中包含中文显示正常
部分代码如下:
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html;charset=gb2312");
PrintWriter out= resp.getWriter(); String title = "Reading All Request Parameters";
out.println("<html><head><title>读取所有参数</title></head>"
+ "<BODY BGCOLOR='#FDF5E6'>\n" + "<H1 ALIGN=CENTER>" + title
+ "</H1>\n" + "<TABLE BORDER=1 ALIGN=CENTER>\n"
+ "<TR BGCOLOR=\"#FFAD00\">\n"
+ "<TH>Parameter Name<TH>Parameter Value(s)");
Enumeration paramNames = req.getParameterNames();
while (paramNames.hasMoreElements()) {
String paramName = (String) paramNames.nextElement();
out.print("<TR><TD>" + paramName + "\n<TD>");
String[] paramValues = req.getParameterValues(paramName);
if (paramValues.length == 1) {
String paramValue = paramValues[0];
if (paramValue.length() == 0)
out.println("<I>No Value</I>");
else
out.println(paramValue);
} else {
out.println("<UL>");
for (int i = 0; i < paramValues.length; i++) {
out.println("<LI>" + paramValues[i]);
}
out.println("</UL>");} }
out.println(" 上的风格</TABLE>\n</BODY></HTML>");
}
其中比如“上的风格”四个字能正确的显示出来!
但是从html页面传递过来的中文参数显示出的是一对乱码中文!如:
“龙”为“榫?”
部分代码如下:
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html;charset=gb2312");
PrintWriter out= resp.getWriter(); String title = "Reading All Request Parameters";
out.println("<html><head><title>读取所有参数</title></head>"
+ "<BODY BGCOLOR='#FDF5E6'>\n" + "<H1 ALIGN=CENTER>" + title
+ "</H1>\n" + "<TABLE BORDER=1 ALIGN=CENTER>\n"
+ "<TR BGCOLOR=\"#FFAD00\">\n"
+ "<TH>Parameter Name<TH>Parameter Value(s)");
Enumeration paramNames = req.getParameterNames();
while (paramNames.hasMoreElements()) {
String paramName = (String) paramNames.nextElement();
out.print("<TR><TD>" + paramName + "\n<TD>");
String[] paramValues = req.getParameterValues(paramName);
if (paramValues.length == 1) {
String paramValue = paramValues[0];
if (paramValue.length() == 0)
out.println("<I>No Value</I>");
else
out.println(paramValue);
} else {
out.println("<UL>");
for (int i = 0; i < paramValues.length; i++) {
out.println("<LI>" + paramValues[i]);
}
out.println("</UL>");} }
out.println(" 上的风格</TABLE>\n</BODY></HTML>");
}
其中比如“上的风格”四个字能正确的显示出来!
但是从html页面传递过来的中文参数显示出的是一对乱码中文!如:
“龙”为“榫?”
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>a simple apply for test</title>
</head>
<body >
<h1 align=center>A Simple Form using Post</h1>
<tr>
<center><img src=asf-logo.gif></center>
<form action="ShowParams" method="get">
<table border=1 width=250>
<caption> <h1>Form<h1></caption>
<tr>
<td>Item Number:</td><td><input type="text" name="itemNum"></td><br>
</tr>
<tr>
<td>Quantity:</td><td><input type="text" name="quantity"></td><br>
</tr>
<tr>
<td>Prince Each:</td><td><input type="text" name="prince" value="$"></td><br>
</tr>
<hr>
<tr>
<td>Name:</td><td><input type="text" name="name"></td><br>
</tr>
<td>Photoname:</td><td><input type=text name="no"></td><br>
<tr><td>Address:</td><td><textarea type="text" name="address" cols=40 rows=3></textarea><br>
</td></tr>
<tr ><td>Credit Card:</td>
<td><input type="RADIO" name="cardtype"
value="Visa">Visa<br>
<input type="RADIO" name="cardtype"
value="Master Card">Master Card<br>
<input type="RADIO" name="cardtype"
value="Amex">Amex<br>
<input type="RADIO" name="cardtype"
value="Disvover">Disvover<br>
<input type="RADIO" name="cardtype"
value="Java SmartCard">Java SmartCard<br></td>
</tr>
<tr>
<td>Credit card Number:</td>
<td><INPUT type="password" name="cardnum"></td><br>
</tr>
<tr>
<td> Repeat Credit card Number:</td>
<td> <input type="password" name="cardnum"></td><br>
</tr>
<tr colspan=2> <td><input type="submit" value="sumbit order"></td>
</tr>
</table>
</form>
<br><br><br><br><br><br><br><br><br>
</body>
</html>
改成
resp.setContentType("text/html;charset=utf-8");
你要和html编码一致才行啊。记得清除缓存。
由于传递和显示编码不同会出现乱码
用的时候可以先转码
paramName==new String(paramName.getBytes("iso8859-1"),"GB2312") ;
String[] paramValues = req.getParameterValues(paramName);
换成
String[] paramValues = new String(req.getParameterValues(paramName).getBytes("iso8859-1"),"GB2312") ;
然后重新启动tomcat
<Connector port="8888" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEnconding="UTF-8"/>
改为
resp.setContentType("text/html;charset=UTF-8");
<filter-name>Spring encoding filter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>gb2312</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Spring encoding filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
request.setCharacterEncoding("utf-8");
还有就是使用过滤器CharacterEncodingFilter.javaimport java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
*
* 设置编码方式,过滤所有的请求
*/public class CharacterEncodingFilter implements Filter {
FilterConfig config=null;
private String encoding = "gbk2312"; public void destroy() {
config = null;
} public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(encoding);
chain.doFilter(request, response);
} public void init(FilterConfig config) throws ServletException {
this.config = config;
encoding = config.getInitParameter("config"); }}
在xml文件中这样配置<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>
shenghua.zhang.com.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>config</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>