本文介绍Tomcat 4.0和Tomcat 4.1下JSP页面中文问题解答,这些方法都已经在 中文版 Windows 98 + JDK 1.3.1 和 中文版 Windows 2000 + JDK 1.3.1 下通过了测试。
现在, Tomcat 作为一种超卓的开放源代码的 JSP 服务器,现在在 JSP 的开发过程中获得了广泛的运用. 可是作为一款英语国家公司开发的软件, 在中文环境下不可避免的会呈现一些乱码问题. 这儿就 Tomcat 4.0和Tomcat 4.1 下的常见中文问题及其处理办法做一个总结. 这些办法都已经在 中文版 Windows 98 + JDK 1.3.1 和 中文版 Windows 2000 + JDK 1.3.1 下经过了测验. 另外在 IBM 的网站上有一个网页 http://www-900.ibm.com/developerWorks/cn/java/JSP_dbcsz/index.shtml 也评论了这个问题.
首要为了便于评论, 这儿首要列出了一些便利的东西办法, 便于咱们的评论. 这些办法如下所示:
- publicStringtoChi(Stringinput){
- try{
- byte[]bytes=input.getBytes("ISO8859-1");
- returnnewString(bytes);
- }catch(Exceptionex){
- }
- returnnull;
- }
- //对给定字符进行URL编码
- publicStringencode(Stringvalue){
- if(isEmpty(value))return"";
- returnjava.net.URLEncoder.encode(value);
- }
- //对给定字符进行URL解码
- publicStringdecode(Stringvalue){
- if(isEmpty(value))return"";
- returnjava.net.URLDecoder.decode(value);
- }
问题1. 浏览器中看到的 JSP页面中的汉字怎样都成了
或许原因如下: 您的页面中没有指定页面的字符集为中文. 处理办法(适用于Tomcat 4.0和Tomcat 4.1)是在页面中增加如下代码:
- <%@pagecontentType="text/html;charset=gb2312"%>
- <metahttp-equiv="Content-Type"content="text/html;charset=gb2312">
问题2. 经过 POST 办法提交的表单的汉字都显现为乱码(在 Tomcat 4.0 下正常, Tomcat 4.1 下呈现).
或许原因如下: POST 提交的字符串都是 ISO8859-1 编码的, 只要把它的字符集转化到中文就行了. 处理办法如下(适用于 Tomcat 4.1):
- //单个的参数
- Stringresult=toChi(request.getParameter("parameterName"));
- //多个参数
- Stringvalues[]=request.getParameterValues(name);
- if(values!=null){
- for(inti=0;i<values.length;i++){
- values[i]=toChi(values[i]);
- }
- }
问题3. 经过 GET 办法提交的表单的汉字都显现为乱码(在 Tomcat 4.0和Tomcat 4.1 下都呈现).或许原因如下: GET 提交的字符串都是 ISO8859-1 编码的, 只要把它的字符集转化到中文就行了. 处理办法如下(适用于 Tomcat 4.1, Tomcat 4.0 下不能用于 page.jsp?username=中文):
- //单个的参数
- Stringresult=toChi(request.getParameter("parameterName"));
- //多个参数
- Stringvalues[]=request.getParameterValues(name);
- if(values!=null){
- for(inti=0;i<values.length;i++){
- values[i]=toChi(values[i]);
- }
- }
问题4. Cookie 中不能写入汉字或许汉字无法正确显现.或许原因如下: Tomcat 4.0 下主动把 Cookie 做了编码为 ISO8859-1 的存储, 而 Tomcat 4.1 下的 JSP 引擎不支持包括含有汉字的 Cookie.
Tomcat 4.0 下的处理办法:
- //依据Cookie称号得到恳求中的Cookie值,假如Cookie值是null,则回来""
- publicStringgetCookieValue(HttpServletRequestrequest,Stringname){
- Cookie[]cookies=request.getCookies();
- if(cookies==null)return"";
- for(inti=0;i<cookies.length;i++){
- Cookiecookie=cookies[i];
- if(cookie.getName().equals(name)){
- //需要对Cookie中的汉字进行URL反编码,适用版别:Tomcat4.0
- returndecode(cookie.getValue());
- }
- }
- //Acookiemightnotreturnanullvalue,mayreturna""
- return"";
- }
Tomcat 4.1 下的处理办法:
- //写入包括汉字Cookie的办法
- response.addCookie(newCookie("cookieName",encode("汉字")));
- //得到Cookie值的办法(同Tomcat4.0的处理办法)
- publicStringgetCookieValue(HttpServletRequestrequest,Stringname){
- Cookie[]cookies=request.getCookies();
- if(cookies==null)return"";
- for(inti=0;i<cookies.length;i++){
- Cookiecookie=cookies[i];
- if(cookie.getName().equals(name)){
- //需要对Cookie中的汉字进行URL反编码,适用版别:Tomcat4.0
- returndecode(cookie.getValue());
- }
- }
- //Acookiemightnotreturnanullvalue,mayreturna""
- return"";
- }
问题5. 在 Tomcat 4.0 下 GET 恳求(如: page.jsp?username=中文) 无法回来本来的值.原因: 与 Tomcat 引擎有关, 不管是否转化内码, 均无法回来本来的值, 可是有一个代替办法, 如下:
将URL地址改变为 "page.jsp?username=" + encode("中文")然后运用下列代码取回参数:
- //单个的参数
- Stringresult=toChi(request.getParameter("parameterName"));
【修改引荐】
- 简略介绍JSP数据库高档操作
- 完成JSP数据和JavaScript数据交互运用
- JSP和Servlet中的几个编码的效果及原理
- 怎么处理JSP页面显现乱码问题
- 在JSP顶用JDBC衔接各种数据库