你在写入数据库时,先把iso-8859-1转换GB2312字符

解决方案 »

  1.   

    往数据库表里写入时候转换成:
    str=request.getParameter("str");
      new String(str.trim().getBytes("iso8859-1"), "GB2312");
      

  2.   

    ,一般遇到中文问题使用转换函数转换.toChinese()
    public static String toChinese(String strvalue)
       {
             try{
                 if(strvalue==null)
                    return null;
                 else
                 {
                    strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK");
                    return strvalue;
             }
             }catch(Exception e){
                   return null;
             }
       }凡是涉及中文字符串,如从数据库中读取中文字符串,或变量名赋值时,使用toChinese函数:
    toChinese("这是中文字符串")
      

  3.   

    to xqi8(星期八):
    你的办法到是可以考虑
      

  4.   

    在顺便问一个小问题:
    GBK和GB2312有什么区别?
      

  5.   

    gbk比gb2312包含的字符多,gb18030更多
      

  6.   

    为什么通过[a.jsp?para=value]在jsp页面间传递中文字符,接收后变为乱码了?
      

  7.   

    在tomcat目录下/wepapps/examples/WEB-INF/classes/filters有一个文件SetCharacte rEncodingFilter.class copy到你的classes/filters目录下 再在web.xml加上     <filter>         <filter-name>Set Character Encoding</filter-name>         <filter-class>filters.SetCharacterEncodingFilter</filter-class>         <init-param>             <param-name>encoding</param-name>             <param-value>gb2312</param-value>         </init-param>     </filter> 
    用这个方法试试!
      

  8.   

    to  yophoo(雅风):
    放在哪个web.xml里?
    是webapps\myweb\WEB-INF\下的,还是conf\下的?
      

  9.   

    加在webapps\myweb\WEB-INF\的web.xml里tomcat启动是报错:(
      

  10.   

    错误信息如下:
    严重: Parse Error at line 42 column 11: The content of element type "web-app" mu
    st match "(icon?,display-name?,description?,distributable?,context-param*,filter
    *,filter-mapping*,listener*,servlet*,servlet-mapping*,session-config?,mime-mappi
    ng*,welcome-file-list?,error-page*,taglib*,resource-env-ref*,resource-ref*,secur
    ity-constraint*,login-config?,security-role*,env-entry*,ejb-ref*,ejb-local-ref*)
    ".
    org.xml.sax.SAXParseException: The content of element type "web-app" must match
    "(icon?,display-name?,description?,distributable?,context-param*,filter*,filter-
    mapping*,listener*,servlet*,servlet-mapping*,session-config?,mime-mapping*,welco
    me-file-list?,error-page*,taglib*,resource-env-ref*,resource-ref*,security-const
    raint*,login-config?,security-role*,env-entry*,ejb-ref*,ejb-local-ref*)".
            at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Un
    known Source)
            at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
            at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
            at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
            at org.apache.xerces.impl.dtd.XMLDTDValidator.handleEndElement(Unknown S
    ource)
            at org.apache.xerces.impl.dtd.XMLDTDValidator.endElement(Unknown Source)        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(
    Unknown Source)
            at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContent
    Dispatcher.dispatch(Unknown Source)
            at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Un
    known Source)
            at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
            at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
            at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
            at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
            at org.apache.commons.digester.Digester.parse(Digester.java:1543)
            at org.apache.catalina.startup.ContextConfig.applicationConfig(ContextCo
    nfig.java:282)
            at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:63
    9)
            at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfi
    g.java:243)
            at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(Lifecycl
    eSupport.java:166)
            at org.apache.catalina.core.StandardContext.start(StandardContext.java:3
    567)
            at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1188)        at org.apache.catalina.core.StandardHost.start(StandardHost.java:738)
            at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1188)        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:347
    )
            at org.apache.catalina.core.StandardService.start(StandardService.java:4
    97)
            at org.apache.catalina.core.StandardServer.start(StandardServer.java:219
    0)
            at org.apache.catalina.startup.Catalina.start(Catalina.java:512)
            at org.apache.catalina.startup.Catalina.execute(Catalina.java:400)
            at org.apache.catalina.startup.Catalina.process(Catalina.java:180)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
    java:39)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
    sorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:324)
            at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:203)
      

  11.   

    传递中文看看这样可以 String s=java.net.URLEncoder.encode("中文!"); 
    另外一般中文的处理办法如下:
    1:在jsp页面加入:  
    <%@  page  contentType="text/html;  charset=gb2312"  %>  
     2:在servlet里面:  
       public  void  doGet(HttpServletRequest  request,  HttpServletResponse  response)  throws  ServletException,  IOException  {  
           response.setContentType("text/html;  charset=gb2312");//这是重要的  
     
    3:上面的如果在不行就用如下的方法在数据入库前进行调用:  
    public  static  String  UnicodeToChinese(String  s){  
       try{  
             if(s==null  &brvbar;  &brvbar;s.equals(""))  return  "";  
             String  newstring=null;  
             newstring=new  String(s.getBytes("ISO8859_1"),"gb2312");  
             return  newstring;  
           }  
       catch(UnsupportedEncodingException  e)  
       {  
       return  s;  
       }  
       }  
     
    public  static  String  ChineseToUnicode(String  s){  
       try{  
       if(s==null  &brvbar;  &brvbar;s.equals(""))  return  "";  
       String  newstring=null;  
       newstring=new  String(s.getBytes("gb2312"),"ISO8859_1");  
         return  newstring;  
       }  
       catch(UnsupportedEncodingException  e)  
       {  
       return  s;  
     }  
       }
      

  12.   

    to  hhuzhj(阿金) :
    在jsp里加<%@  page  contentType="text/html;  charset=gb2312"  %>的确管一些用,但是传递参数还不能解决?
      

  13.   

    放在web.xml的<web-app>和</web-app>之间
      

  14.   

    import java.lang.*;
    import javax.servlet.*;
    import javax.servlet.jsp.*;
    import javax.servlet.http.*;
    import java.util.Enumeration;
    import java.io.*;
    import java.util.*;public class StrUtil {
    private static final String code0="ISO8859_1";
    private static final String code1="GBK";
    private static final String code2="BIG5";
    private String str;
    private String getBytesCode="GBK";
    private String retChgCode="ISO8859_1"; private String setting=""; public StrUtil(){
    } public StrUtil(String str){
    Setting(str);
    } public void Setting(String setting){
    this.setting=setting;
    } //-------------------------------------------------
    // valueStr用于:
    //-------------------------------------------------
    //  1. com.caucho.mysql.Driver.
    // 2. 没有使用以下语句:
    // <%@ page contentType="text/html;charset=2312" %>
    // 或 <% response.setContentType("text/html;charset=2312"); %>
    //  3. 在程序中给字符串变量赋值时,
    // 如: 
    // StrUtil strCorrect;
    // String aa=strCorrect.valueStr("中文");
    //-------------------------------------------------
    public String valueStr(){
    // byte[] tmpbyte;
    // str.getBytes("ISO8859-1");
    // str=new String(tmpbyte); //----------------------------------------------
    // 在一些平台, 或一些设置下, 是不需要字符转换的, 这时直接返回原值
    //----------------------------------------------
    if (setting.equals("")||setting.equals("NORMAL")||setting.equals("doNothing")) return str;
    if (str==null)str="";
    if (setting.equals("gb_iso8859")){
    getBytesCode=code1;
    retChgCode=code0;
    }
    if (setting.equals("iso8859_gb")){
    getBytesCode=code0;
    retChgCode=code1;
    } try{ byte[] getCode=str.getBytes(getBytesCode);
    String putCode=new String(getCode,retChgCode);
    // return str;
    // System.out.println("test----- "+putCode);
    return putCode;
    }catch(java.io.UnsupportedEncodingException e){
    System.err.println("Error Encoding");
    }
    return null;
    } public String valueStr(String str){
    this.str=str;
    return valueStr();
    }
    public String show(String str){
    return valueStr(str);
    }}
      

  15.   

    to  yophoo(雅风) :
    加了就报错啊,看看我的回复
      

  16.   

    <?xml version="1.0" encoding="iso-8859-1"?><!DOCTYPE web-app
        PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd"><web-app>
      <display-name>Welcome to Tomcat</display-name>
      <description>
         Welcome to Tomcat
      </description>
       
      
          <filter> 
            <filter-name>Set Character Encoding</filter-name> 
            <filter-class>filters.SetCharacterEncodingFilter</filter-class> 
            <init-param> 
                <param-name>encoding</param-name> 
                <param-value>GB2312</param-value> 
            </init-param> 
        </filter>
    </web-app>
      

  17.   

    <web-app>
      <display-name>Welcome to Tomcat</display-name>
      <description>
         Welcome to Tomcat
      </description>
       
      
          <filter> 
            <filter-name>Set Character Encoding</filter-name> 
            <filter-class>filters.SetCharacterEncodingFilter</filter-class> 
            <init-param> 
                <param-name>encoding</param-name> 
                <param-value>GB2312</param-value> 
            </init-param> 
        </filter>
    <filter-mapping>
            <filter-name>Set Character Encoding</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    </web-app>
      

  18.   

    根据我的tomcat4.1.18,4.1.24上的使用
    就是有一点要特别注意的当你的web.xml里面还有其它的定义比如listener,servlet的
    记得把filter,filter-mapping放在文件里的前头 不然会出错的
    也就是要对照底下的出现顺序!
    (icon?,display-name?,description?,distributable?,context-param*,filter
    *,filter-mapping*,listener*,servlet*,servlet-mapping*,session-config?,mime-mappi
    ng*,welcome-file-list?,error-page*,taglib*,resource-env-ref*,resource-ref*,secur
    ity-constraint*,login-config?,security-role*,env-entry*,ejb-ref*,ejb-local-ref*)
      

  19.   

    to  xmvigour(微电--有狼的气质 没狼的勇气 真郁闷):
    虽然启动tomcat的时候,还有错误信息,可是中文好象没有问题了:)
      

  20.   

    我的里面有context-param和resource-ref按照你的说法,我就按下面的顺序放了
    context-paramfilter
    filter-mappingresource-ref
      

  21.   

    重新启动了一次没有错误了:)是不是必须加filter-mapping呢?
      

  22.   

    试试在读取request前调用以下方法:
    request.setCharacterEncoding("GBK");
      

  23.   

    waste(凯凯) 的做法可行~!!!
      

  24.   

    可是我有好几百个页面不能每个参数都使用waste(凯凯)的方法,所以不能!