当前位置:沸点梦工场 > WAP网页设计 > Jsp wap开发教程 > 浏览文章

解决JSP中wap乱码问题

互联网 2007年06月04日 【字体:

以前做jsp是遇到过到是好解决,一般在接受内容的页面进行如下操作:(具体可能和你的web服务器有关,我这里使用的是tomcat默认配置,要是你更改了web.xml文件那么可能有所变化)

如果你是直接打印前面表单的内容那么可能是将编码由ISO-8859-1转化为GB2312;
如果你是对数据库操作则不需要转码;
同样从数据库提取数据打印在页面时需要将ISO-8859-1转化为GB2312;


我这里的wap环境是jdk1.5+tomcat5.0.18+jsdk2.0,除了server.xml的虚拟机外,没有修改tomcat的其他参数。

基本表单代码示例:

<%@ page contentType="text/vnd.wap.wml;charset=gb2312" %>
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head>
<meta http-equiv="Cache-Control" content="max-age=0" />
</head>
<card >

<p>

<input name="pro" /><br/>

<anchor>test
  <go href="t.jsp" method="post">
    <postfield name="pos" value="$(pos)"/>
  </go>
</anchor>

<br/>
</p>
</card>

</wml>


转向的数据库操作页面:

<%@ page contentType="text/vnd.wap.wml;charset=GB2312" %>
<%
String pro;
%>
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">

<wml>
<head>
<meta http-equiv="Cache-Control" content="max-age=0" />
</head>
<card >
<p>

//我没有想到这里还要转码 :(-
<% request.setCharacterEncoding("UTF-8"); %>

<% 
  pro = request.getParameter("pro");
    
  out.println(pro); 
  //sqltext 为拼写的sql语句
  new String(sqltext.getBytes("GB2312"),"ISO-8859-1")
  //....其他内容,
  //直接打印数据库的结果内容在wap页面
  
%>
<br/>

</p>
</card>

</wml>



附加我写的转码的类:

package net.dmresearch.util;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;


/**
 *  转换字符编码类
 *
 */
public class Charset{
  
  private String gb = "GBK";
  
  /**
   * 构造函数
   *
   */
  public Charset(){
    //
    }
  
  /**
   * 实现字符串的字符转换 to ISO-8859-1
   *
   * @param inputString 输入字符串
   * @param outputString 输出字符串
   *
   */
   
   public String to_ISO(String inputString){
     String outputString = inputString;
     try{
       String temp  = new String(inputString.getBytes(),"ISO-8859-1");
       outputString = temp;
       }
      catch(UnsupportedEncodingException uee){
        //
        }
        
      if(outputString.compareTo("")==0){
        //
        }  
    return outputString;     
     }
     
     
  /**
   * 实现字符串的字符转换 to gb2312
   *
   * @param inputString 输入字符串
   * @param outputString 输出字符串
   *
   */
   
   public String to_GB(String inputString){
     String outputString = inputString;
     try{
       String temp  = new String(inputString.getBytes(),"gb2312");
       outputString = temp;
       }
      catch(UnsupportedEncodingException uee){
        //
        }
    return outputString;     
     }
   
  /**
   * 对url进行编码
   * 
   * @param url :包含于url的字符串
   *
   */     
  public String enCode(String url){
    String okURL = url;
    try{    
        okURL = java.net.URLEncoder.encode(url,"UTF-8");
      }
      catch(java.io.UnsupportedEncodingException uee){
        //res = "uee = "+uee.getMessage();
      }
    
    return okURL;
    } 

  /**
   * 对url进行编码
   * 
   * @param url :包含于url的字符串
   * @param encodeCharset :编码的目标字符
   */     
  public String enCode(String url,String encodeCharset){
    String okURL = url;
    try{    
        okURL = java.net.URLEncoder.encode(url,encodeCharset);
      }
      catch(java.io.UnsupportedEncodingException uee){
        //res = "uee = "+uee.getMessage();
      }
    
    return okURL;
    } 

  /**
   *  ISO to GBK
   *
   */
  public String ISO_2_GBK(String s_string){
    try{
      String des = new String(s_string.getBytes("iso-8859-1"),gb);
      return des;
      }
    catch(Exception ex){
      String des="";
      return des;
      }
    }  
  
  /**
   *
   *  GBK to ISO
   */
  public String GBK_2_ISO(String s_string){
    try{
      String des  =  new String(s_string.getBytes(gb),"iso-8859-1");
      return des;
      }
    catch(Exception ex){
      String des = "";
      return des;
      }  
    }
  
  }