62,634
社区成员




<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" errorPage="../error.jsp" %>
String ttee = new String(request.getParameter("name").getBytes("utf-8"), "gbk");
ttee = new String(ttee.getBytes("gbk"), "utf-8");
//结果乱码
//直接
ttee = new String(request.getParameter("name")); //也是乱码
String text = "中国";
String encode2 = new String(text.getBytes("GBK"), "UTF-8");
//怎么把encode2转成中文
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%
String name = request.getParameter("name");
System.out.println(name);
%>
STEP.2.设置TOMCAT配置文件 cong/server.xml
在 Connector 节点 添加属性 URIEncoding="UTF-8"
STEP.3.在浏览器输入地址 http://localhost/test/test.jsp?name=%D6%D0%B9%FA
观察打印的结果
public class HttpRequestReader {
Hashtable pairs = new Hashtable();
/**
* RawParameterReader constructor comment.
*/
public HttpRequestReader(HttpServletRequest request, String encoding)
throws IOException {
super();
parse(request.getQueryString(), encoding);
parse(request.getReader().readLine(), encoding);
}
public static String decode(String s, String encoding) throws Exception {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
switch (c) {
case '+':
sb.append(' ');
break;
case '%':
try {
sb.append((char) Integer.parseInt(
s.substring(i + 1, i + 3), 16));
} catch (NumberFormatException e) {
throw new IllegalArgumentException();
}
i += 2;
break;
default:
sb.append(c);
break;
}
}
// Undo conversion to external encoding
String result = sb.toString();
byte[] inputBytes = result.getBytes("8859_1");
return new String(inputBytes, encoding);
}
/**
* Insert the method's description here. Creation date: (2001-2-4 17:30:59)
*
* @return java.lang.String
* @param name
* java.lang.String
*/
public String getParameter(String name) {
if (pairs == null || !pairs.containsKey(name))
return null;
return (String) (((ArrayList) pairs.get(name)).get(0));
}
/**
* Insert the method's description here. Creation date: (2001-2-4 17:28:17)
*
* @return java.util.Enumeration
*/
public Enumeration getParameterNames() {
if (pairs == null)
return null;
return pairs.keys();
}
/**
* Insert the method's description here. Creation date: (2001-2-4 17:33:40)
*
* @return java.lang.String[]
* @param name
* java.lang.String
*/
public String[] getParameterValues(String name) {
if (pairs == null || !pairs.containsKey(name))
return null;
ArrayList al = (ArrayList) pairs.get(name);
String[] values = new String[al.size()];
for (int i = 0; i < values.length; i++)
values[i] = (String) al.get(i);
return values;
}
/**
* Insert the method's description here. Creation date: (2001-2-4 20:34:37)
*
* @param urlenc
* java.lang.String
*/
private void parse(String urlenc, String encoding)
throws java.io.IOException {
if (urlenc == null)
return;
StringTokenizer tok = new StringTokenizer(urlenc, "&");
try {
while (tok.hasMoreTokens()) {
String aPair = tok.nextToken();
int pos = aPair.indexOf("=");
String name = null;
String value = null;
if (pos != -1) {
name = decode(aPair.substring(0, pos), encoding);
value = decode(aPair.substring(pos + 1), encoding);
} else {
name = aPair;
value = "";
}
if (pairs.containsKey(name)) {
ArrayList values = (ArrayList) pairs.get(name);
values.add(value);
} else {
ArrayList values = new ArrayList();
values.add(value);
pairs.put(name, values);
}
}
} catch (Exception e) {
throw new java.io.IOException(e.getMessage());
}
}
}
在你的jsp中就可以这样使用
HttpRequestReader paramReader = new HttpRequestReader(request, "gbk");
String name = paramReader.getParameter("name");
System.out.println(name);
这样应该就没有问题了