我的web项目对中文问题的设置如下
      在web.xml中设置了一个过滤器
            关键部分如下:
                  <init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
     在Tomcat的server中对中文文件名的设置如下:
                <Connector port="80" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" 
               useBodyEncodingForURI="true"/>
     
    --------------
     请问怎么解决用AJAX post 数据到servlet时出现的乱码问题呢?
     

解决方案 »

  1.   

    您说的是request.setCharacterEncoding("GBK");吧!
      我试过了没用
      

  2.   

    不是这个意思,你要先对param进行百分号编码,并且确定你的输入字符串使用的确实是GBK
      

  3.   

    在SERVLET获取的时候转换一下
    public static String unescape(String s) {
    StringBuffer sbuf = new StringBuffer();
    int l = s.length();
    int ch = -1;
    int b, sumb = 0;
    for (int i = 0, more = -1; i < l; i++) {
    /* Get next byte b from URL segment s */
    switch (ch = s.charAt(i)) {
    case '%':
    ch = s.charAt(++i);
    int hb = (Character.isDigit((char) ch) ? ch - '0'
    : 10 + Character.toLowerCase((char) ch) - 'a') & 0xF;
    ch = s.charAt(++i);
    int lb = (Character.isDigit((char) ch) ? ch - '0'
    : 10 + Character.toLowerCase((char) ch) - 'a') & 0xF;
    b = (hb << 4) | lb;
    break;
    case '+':
    b = ' ';
    break;
    default:
    b = ch;
    }
    /* Decode byte b as UTF-8, sumb collects incomplete chars */
    if ((b & 0xc0) == 0x80) { // 10xxxxxx (continuation byte)
    sumb = (sumb << 6) | (b & 0x3f); // Add 6 bits to sumb
    if (--more == 0)
    sbuf.append((char) sumb); // Add char to sbuf
    } else if ((b & 0x80) == 0x00) { // 0xxxxxxx (yields 7 bits)
    sbuf.append((char) b); // Store in sbuf
    } else if ((b & 0xe0) == 0xc0) { // 110xxxxx (yields 5 bits)
    sumb = b & 0x1f;
    more = 1; // Expect 1 more byte
    } else if ((b & 0xf0) == 0xe0) { // 1110xxxx (yields 4 bits)
    sumb = b & 0x0f;
    more = 2; // Expect 2 more bytes
    } else if ((b & 0xf8) == 0xf0) { // 11110xxx (yields 3 bits)
    sumb = b & 0x07;
    more = 3; // Expect 3 more bytes
    } else if ((b & 0xfc) == 0xf8) { // 111110xx (yields 2 bits)
    sumb = b & 0x03;
    more = 4; // Expect 4 more bytes
    } else /* if ((b & 0xfe) == 0xfc) */{ // 1111110x (yields 1 bit)
    sumb = b & 0x01;
    more = 5; // Expect 5 more bytes
    }
    /* We don't test if the UTF-8 encoding is well-formed */
    }
    return sbuf.toString();
    }