Java EE中编码方式
Servlet中的编码方式:
通过对response的设置编码方式使得返回的结果支持中文显示。
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8"); //设置编码方式
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(request.getContentType()+"你好"); //要显示的中文
out.print("<form action='./WhatIsContentType' method='post'>");
out.print("name");
out.print("<input name='name'>");
out.print("<button>submit</button>");
out.print("</form>");
out.print(this.getClass());
out.println(", using the GET method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
如果要是提交的表单中有中文字符我们该如何正确的取的中文字符呢,可以通过filter来实现:
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
((HttpServletRequest) arg0).setCharacterEncoding("UTF-8");
((HttpServletResponse) arg1).setCharacterEncoding("UTF-8");
arg2.doFilter(arg0, arg1);
}
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
pageEncoding指的是当前jsp页面文件本身的编码方式,默认是iso-8859-1。它会根据pageEncoding的设定读取jsp,结果是由指定的编码方案翻译成统一的UTF-8 JAVA源码(即.java),所以要想有中文字符,JSP页面本身的编码首先要改成UTF-8或者GBK,否则用iso-8859-1编码汉字肯定会是乱码。
之后.java文件经过编译会生成.class文件,这个过程必定是UTF-8格式的编码
最后一个属性叫做contentType,我的理解和servlet中的response和request的contentType有点类似。因为servlet是java编写的,编码自身文件时就是UTF-8,而jsp是html和java混合,编码方式通过pageEncoding方式指定。如果说pageEncoding决定了能否正确编码,那么contentType中的charset决定了是否会显示乱码。
不包含中文字符其他字符的情况下:pageEncoding和charSet甚至任意设置都没有问题。
包含中文字符(及其他字符)的情况下:JSP页面包含中文例,首先pageEncoding必须要选择中文编码方式GBK,GB2312,或者直接UTF-8。这里pageEncoding如果设置成其他字符如iso-8859-1的方式,charset无论怎么设置都会乱码。如果pageEncoding选择了中文字符编码,或者UTF-8,那么charSet也设置成中文编码或者UTF-8即可,如果选择iso-8859-1编码同样会出现乱码。简言之就是pageEncoding和charSet尽量设置成统一的字符编码,需要支持汉字或其他字符情况,两者都设置成支持的字符编码方式。当然统一设置成UTF-8,就OK了。
参考地址:http://www.cnblogs.com/huangli1989/archive/2013/10/10/3361428.html