shuoclarence
2015-02-01 21:44
我写的代码想加一个判断用户名密码是不是给定用户名密码的功能,便多写了一段程序,写完之后发现用户名为英文时判断没有问题,但是中文就有问题,这是我接收到用户名密码并处理的jsp文本中的一段代码:
request.setCharacterEncoding("utf-8");
String un = URLEncoder.encode(request.getParameter("username"),"utf-8");
String pw= URLEncoder.encode(request.getParameter("password"),"utf-8");
if(URLDecoder.decode(un, "utf-8").equals("中文用户名")&&pw.equals("12345"))
{
……
}
经过多次试验我发现request.getParameter("username")已被转码(不是中文),un已被转码(不是中文),URLDecoder.decode(un, "utf-8")已被转码(不是中文),URLDecoder.decode(request.getParameter("username"), "utf-8")也被转码(不是中文),那如何获得用户输入的中文字符并做出判断呢?
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
分别设置Request的Post请求编码和Response响应编码
想要设置Get的请求编码,由于Get的请求编码默认是ISO编码,你需要从Request中获取该中文内容
String username=request.getParameter("name");
byte[] bytes=username.getBytes("ISO-8859-1");
username=new String(bytes,"utf-8");
jsp的页面编码你设置了没有?pageEncoding是jsp文件本身的编码contentType的charset是指服务器发送给客户端时的内容编码,jsp要经过两次的“编码”,第一阶段会用pageEncoding,第二阶段会用utf-8至utf-8,第三阶段就是由Tomcat出来的网页, 用的是contentType。
第一阶段是jsp编译成.java,它会根据pageEncoding的设定读取jsp,结果是由指定的编码方案翻译成统一的UTF-8 JAVA源码(即.java),如果pageEncoding设定错了,或没有设定,出来的就是中文乱码。
第二阶段是由JAVAC的JAVA源码至java byteCode的编译,不论JSP编写时候用的是什么编码方案,经过这个阶段的结果全部是UTF-8的encoding的java源码。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
JAVA遇见HTML——JSP篇
248279 学习 · 3071 问题
相似问题