Tomcat的中文處理(四):
2008-04-26 00:21
495 查看
转载:注明http://www.csdn.net/develop/article/17/17204.shtmTomcat[/b]的中文處理[/b](四)[/b]:[/b][/b] 2)在servlet和其他java文件中的字符在这种情況下,构造的String使用的系統默认的编码方式的。但是在servlet中从request得到的字符,如果沒有指定request的編碼,那么就是得到的一个编码方式为iso-8859-1的字符,在servlet中,如果沒有指定response的编码方式(通过setContentType),那么,response使用的iso-8859-1的编码方式。 例子:import javax.servlet.*;import javax.servlet.http.*; public class HelloWorldExample extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String name=request.getParameter("name");/////得到name參數的value response.setContentType("text/html ");///不設置編碼,此時response使用iso-8859-1的編碼 PrintWriter out = response.getWriter();//得到字符流,此時的編碼為iso-8859-1 out.println("<html>"); out.println("<head>"); String title="你好";/////构造一个String,注意的是虽然此時没有为response指定编码,但是在servlet中构造的String使用的系统默认的编码的。 out.println("<title>sdsfdsfsdfds</title>"); out.println("</head>"); out.println("<body bgcolor="white">"); out.println("我们大家<br>");///////输出一个编码为本地默认的String到response中,但是此时response的编码是iso-8859-1的,所以出现乱码得 out.println("title is "+title);////title是系统默认的编码,得到乱码 out.println("<br>name is "+name);/////name是request的來的,正确显示 out.println("</body>"); out.println("</html>"); System.out.println("你好");////由于Console是系統默認編碼,所以正確顯示 System.out.println("title is "+title);/////title是默認編碼的,正常顯示 System.out.println("name is "+name);///////name是iso-8859-1的編碼的,亂碼 }}如果我們在response.setContentType("text/html ");改為:response.setContentType("text/html ;charset=GB2312");那么,IE的输出和Console的输出是一样的。 总结:1. 在jsp中<%@ page contentType="text/html; charset=A" %>如果指定了,那么在改jsp中所有构造的String(不是引用),如果沒有指定编码,那么这些String的编码是A的。从request的得到的String如果沒有指定request的编码的话,他是iso-8859-1的从别的地方得到的String是使用原來初始的编码的,比如从数据库得到String,如果数据库的编码是B,那么该String的编码是B而不是A的,也不是系统默认的。 此时,如果要输出的String的编码不是A,那么,很可能显示乱码的,所以首先要将String正確转化为编码A的String,然后输出。2. 在jsp中<%@ page contentType="text/html; charset=A" %>沒有指定,那么相当于指定了<%@ page contentType="text/html; charset=ISO-8859-1" %>3. Servelte中如果执行了像 response.setContentType("text/html;charset=A");説明将response的字符输出流编码设置为A,所有要输出的String的编码要转化为A的,否則会得到乱码的。 Servelet中从request得到的String的编码和jsp中一样的,但是在servlet java文件中构造的String是使用的系统默认的编码的。在servelt中从外部得到的String 是使用原来的编码的,比如从编码为B的数据库得到的数据是编码为B的,不是A,也不是系统默认的编码。 后语: 虽然我们使用的Tomcat来作说明,其他的jsp,servlet引擎其实现的方法也差不多!
相关文章推荐
- Tomcat的中文處理(四):
- Tomcat的中文處理(三):
- Tomcat+MySql+Struts中文问题绝妙的解决方案
- tomcat中请求参数中文中乱码问题
- Tomcat无法访问中文路径的解决办法
- 让Tomcat支持中文文件名
- 关于tomcat中文乱码问题,为什么要先转换为ISO-8859-1!
- maven运行tomcat出现中文乱码的解决
- Tomcat解决中文乱码
- alfresco for Windows Tomcat Bundle中文安装说明
- tomcat get 中文乱码
- tomcat 中文乱码
- TOMCAT+JIVE的安装配置(支持中文)
- MyEclipse中,启动Tomcat时控制台发现中文乱码问题!
- Tomcat7下配置SSI(解决中文乱码问题)
- 让Tomcat支持中文文件名
- tomcat服务器如何配置字符集为utf-8彻底解决中文乱码的问题详解
- Tomcat下报表中文乱码问题怎么解决(润乾v4及集算报表同样适用)
- Tomcat 5/6 GBK 编码下完美解决中文表单问题的过滤器
- tomcat解决中文乱码问题