使数据库操作支持中文。
数据库操作支持中文一直让我比较头痛,但是感谢善解人衣向我推荐了www.chinaxp.org,这个网站是用struts框架开发的,而且
开放源码,下载了源码后发现它的中文处理得很好,阅读部分源码,没有发现什么特殊的字符集转换,很纳闷,偶然看到楼上网友
留言知道原来servlet可以统一设置字符转换。chinaxp.org就是这么做的。
在web.xml中加上
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>com.huahang.tj.struts.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB2312</param-value>
</init-param>
<init-param>
<param-name>ignore</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<servlet-name>action</servlet-name>
</filter-mapping>
这里会涉及一个bean,源码如下:
/*
* XP Forum
*
* Copyright 2002-2003 RedSoft Group. All rights reserved.
*
*/
package com.huahang.tj.struts.filters;import javax.servlet.*;
import java.io.IOException;/**
* <p>Filter that sets the character encoding to be used in parsing the
* incoming request, either unconditionally or only if the client did not
* specify a character encoding. Configuration of this filter is based on
* the following initialization parameters:</p>
* <ul>
* <li><strong>encoding</strong> - The character encoding to be configured
* for this request, either conditionally or unconditionally based on
* the <code>ignore</code> initialization parameter. This parameter
* is required, so there is no default.</li>
* <li><strong>ignore</strong> - If set to "true", any character encoding
* specified by the client is ignored, and the value returned by the
* <code>selectEncoding()</code> method is set. If set to "false,
* <code>selectEncoding()</code> is called <strong>only</strong> if the
* client has not already specified an encoding. By default, this
* parameter is set to "true".</li>
* </ul>
*
* <p>Although this filter can be used unchanged, it is also easy to
* subclass it and make the <code>selectEncoding()</code> method more
* intelligent about what encoding to choose, based on characteristics of
* the incoming request (such as the values of the <code>Accept-Language</code>
* and <code>User-Agent</code> headers, or a value stashed in the current
* user's session.</p>
*
* @author <a href="mailto:[email protected]">John Wong</a>
*
* @version $Id: SetCharacterEncodingFilter.java,v 1.1 2002/04/10 13:59:27 johnwong Exp $
*/
public class SetCharacterEncodingFilter implements Filter {// ----------------------------------------------------- Instance Variables/**
* The default character encoding to set for requests that pass through
* this filter.
*/
protected String encoding = null;/**
* The filter configuration object we are associated with. If this value
* is null, this filter instance is not currently configured.
*/
protected FilterConfig filterConfig = null;/**
* Should a character encoding specified by the client be ignored?
*/
protected boolean ignore = true;// --------------------------------------------------------- Public Methods/**
* Take this filter out of service.
*/
public void destroy() {this.encoding = null;
this.filterConfig = null;}/**
* Select and set (if specified) the character encoding to be used to
* interpret request parameters for this request.
*
* @param request The servlet request we are processing
* @param result The servlet response we are creating
* @param chain The filter chain we are processing
*
* @exception IOException if an input/output error occurs
* @exception ServletException if a servlet error occurs
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {// Conditionally select and set the character encoding to be used
if (ignore || (request.getCharacterEncoding() == null)) {
String encoding = selectEncoding(request);
if (encoding != null)
request.setCharacterEncoding(encoding);
}// Pass control on to the next filter
chain.doFilter(request, response);}/**
* Place this filter into service.
*
* @param filterConfig The filter configuration object
*/
public void init(FilterConfig filterConfig) throws ServletException {this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
String value = filterConfig.getInitParameter("ignore");
if (value == null)
this.ignore = true;
else if (value.equalsIgnoreCase("true"))
this.ignore = true;
else if (value.equalsIgnoreCase("yes"))
this.ignore = true;
else
this.ignore = false;}// ------------------------------------------------------ Protected Methods/**
* Select an appropriate character encoding to be used, based on the
* characteristics of the current request and/or filter initialization
* parameters. If no character encoding should be set, return
* <code>null</code>.
* <p>
* The default implementation unconditionally returns the value configured
* by the <strong>encoding</strong> initialization parameter for this
* filter.
*
* @param request The servlet request we are processing
*/
protected String selectEncoding(ServletRequest request) {return (this.encoding);}}//EOC
加上这个后,在action中就可以直接从form中接收gb2312编码的数据了,返回时自然也是gb2312了。
但是这个好像需要servlet 2.2以上的容器综合上面的方法,我解决了struts中的中文问题,现在还没发现新的问题。
=========================
我用了
好用

解决方案 »

  1.   

    <param-name>encoding</param-name>
    <param-value>GB2312</param-value>
    更改为
    <param-value>UTF-8</param-value>
      

  2.   

    <web-app>
      <display-name>Struts Blank Application</display-name>
    <filter>
    <filter-name>Set Character Encoding</filter-name>省略号还有什么问题?
    没有的话
    把分给我把
      

  3.   

    jsp中<%@ page contentType="text/html; charset=gb2312" %>
    bean中返回的中文字符是从数据库出来的话,用用
    String a=new String(a.getBytes("iso8859-1"),"gb2312");试试,debug看看结果
      

  4.   

    <%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="/tags/struts-bean" prefix="bean" %>
    <%@ taglib uri="/tags/struts-html" prefix="html" %>
    <%@ taglib uri="/tags/struts-logic" prefix="logic" %>
      

  5.   

    太长了吧
    试一试转码吧
    new String(a.getBytes("iso8859-1"),"gb2312");
    new String(a.getBytes("iso8859-1"),"GBK");
    new String(a.getBytes("iso8859-1"),"big5");
    new String(a.getBytes("iso8859-1"),"utf-8");
      

  6.   

    我得问题是,一个java类,其中一个方法返回"中文"这个字符串,在jsp中输出乱码!
      

  7.   

    比如说:
    public class test{
      
        public static String getStr()
        {
            return  "中文";
        }
    }在jsp中输出
    <%out.print(test.getStr())%>
    为乱码
      

  8.   

    简单的方法是:
    String a=new String(a.getBytes("iso8859-1"),"gb2312");
    但是中文问题是服务器级的问题,几乎每个叶面都这样不太高效一劳永逸的配置方法:(tomcat)
    http://blog.csdn.net/wwwer1/articles/142822.aspx
      

  9.   

    这样编译你的类看看:javac -encoding iso8859-1 *.java
      

  10.   

    通过使用 wenxinwenyi()的方法,并使用转码的方式,可以正常显示。
    但是不知道原因究竟在哪
      

  11.   

    但这也不是办法呀
    通过设置过滤器可以解决jsp的字符编码问题,但是普通的java类怎么办呀
      

  12.   

    //处理中文字符
     public String getStr(String str){
         if(str==null){
        str="";    
           } 
      else
       {
      try {  
         str = new String(str.getBytes("iso-8859-1"),"gb2312") ;
            }
      catch (Exception ex) {
            }
         }
        return str ;
      }转换一下就可以了
      

  13.   

    // 处理字符串
    public String codeString(String s)
    {
    String str = s;
    try {byte b[] = str.getBytes("ISO-8859-1");
    str = new String(b);
    }
    catch (Exception e) { }
    return str;
    }<%out.print(codeString(test.getStr()))%>这样试试看!
      

  14.   

    * @param strIso_88591_1 要处理的汉字字符串
    * @return 转换后的汉字字符串
    */
    public static String ex_gb2312(String strIso_88591_1){
    String str = "";
    if(strIso_88591_1==null){
    str = "" ;
    }
    else{
    try {
    str = new String(strIso_88591_1.getBytes("iso-8859-1"),"gb2312");
    } catch (Exception ex) {}
    }
    return str ;
    }