web小程序,页面的中文内容正常,输入的中文数据提交后查看是乱码,菜鸟求指点

小川mac 发布于 2012/08/01 19:25
阅读 2K+
收藏 0
在做一个实现增删改查的小web程序时,出现了中文乱码问题。我的mysql数据库和myeclipse开发工具都设成utf-8字符编码的,jsp文件 中的charset也都设成utf-8了。在网页上我写的页面内容都正常显示,可是我输入的中文数据提交后,再查看就是乱码。我直接在数据库中插入带有中 文的数据,再查询结果,数据库显示的中文没有问题,可是一到网页上就是乱码。我觉得可能是tomcat服务器设置的问题,我用的tomcat6.0,不知 道该怎么设置,我的程序是用servlet写的,没有用框架,在网上看别人说用什么拦截器,我也copy了一份放进去,没有效果。求教懂的人,菜鸟拜上
加载中
0
小川mac
小川mac

引用来自“zhenghui”的答案

new String(你的字符串.getBytes("ISO-8859-1"),"utf-8")

一般中文在url上传递出现乱码我用这个解决

非常感谢,可以解决我的问题,不过,这样做岂不是所有有可能会输入中文的地方都要这样写?这样的话,会不会有点麻烦?有没有设置语句,可以将程序里的请求、响应字符集都设置成固定的“utf-8”呢?最后再次感谢您的帮助!!
霸气千秋
霸气千秋
呵呵,你可以在过滤中设置,请求和相应格式为utf8
0
庄家
tomcat的server.xml里设置80端口那个连接器里添加编码属性为utf-8
小川mac
小川mac
谢谢,不过这个我有设置,还是不行
0
爱coding
爱coding
浏览器编码设置了吗?
0
挑灯论剑
挑灯论剑

在tomcat中设置编码格式

 <Connector port="8080" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000"  useBodyEncodingForURI="true"
               disableUploadTimeout="true"  URIEncoding="utf-8" />
0
Gillian_Male
Gillian_Male

引用来自“挑灯论剑”的答案

在tomcat中设置编码格式

 <Connector port="8080" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000"  useBodyEncodingForURI="true"
               disableUploadTimeout="true"  URIEncoding="utf-8" />
还要设置一个filter过滤器,设置编码方式是UTF-8
0
小川mac
小川mac

引用来自“爱coding”的答案

浏览器编码设置了吗?
浏览器默认字符集编码是gbk2312,我改成utf-8的没有用,而且我觉得改浏览器的编码类型不是解决方法
0
小川mac
小川mac

引用来自“zhenghui”的答案

引用来自“马川”的答案

引用来自“zhenghui”的答案

new String(你的字符串.getBytes("ISO-8859-1"),"utf-8")

一般中文在url上传递出现乱码我用这个解决

非常感谢,可以解决我的问题,不过,这样做岂不是所有有可能会输入中文的地方都要这样写?这样的话,会不会有点麻烦?有没有设置语句,可以将程序里的请求、响应字符集都设置成固定的“utf-8”呢?最后再次感谢您的帮助!!
加个过滤器
package com.util.filters;

 

import java.io.IOException;

import java.io.UnsupportedEncodingException;

import java.util.Enumeration;

 

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

public class ProFilter implements Filter

{

    

    protected FilterConfig filterConfig;

    /**

     * 初始化

     */

    public void init(FilterConfig filterConfig) throws ServletException

    {

       this.filterConfig=filterConfig;

    }

    

    /**

     * 将inStr转为UTF-8的编码形式

     * @param inStr 输入字符串

     * @return  UTF-8的编码形式的字符串

     * @throws UnsupportedEncodingException

     */

    private String toUTF(String inStr) throws UnsupportedEncodingException

    {

       String outStr = "";

       if(inStr != null)

       {

           //outStr=java.net.URLDecoder.decode(inStr);//不用decode了,到这的时候就已经自动decode过了

           //将字符串转为UTF-8编码形式

           outStr = new String(inStr.getBytes("iso-8859-1"),"UTF-8");         

       }

       return outStr;

    }   

 

    /**

     * 中文乱码过滤处理

     */

    public void doFilter(ServletRequest svlrequest, ServletResponse svlresponse,

           FilterChain chain) throws IOException, ServletException

    {

       //将Servlet请求与响应对象转换成HttpServlet请求与响应对象

       HttpServletRequest request=(HttpServletRequest)svlrequest;

       HttpServletResponse response=(HttpServletResponse)svlresponse;

       

       //获得请求的方式(1.post or 2.get),根据不同请求方式进行不同处理

       String method = request.getMethod();

       //1.以post方式提交的请求,直接设置编码为UTF-8

       if(method.equalsIgnoreCase("post"))

       {

           try

           {

              request.setCharacterEncoding("UTF-8");

           } catch (UnsupportedEncodingException e)

           {

              e.printStackTrace();

           }

       }

       //2.以get方式提交的请求

       else

       {

           //取出客户提交的参数集

           Enumeration<String> paramNames = request.getParameterNames();

           //遍历参数集取出每个参数的名称及值

           while(paramNames.hasMoreElements())

           {

              String name = paramNames.nextElement();//取出参数名称

              String values[] = request.getParameterValues(name);//根据参数名称取出其值

              //如果参数值集不为空

              if(values != null)

              {

                  //如果参数值集中只有一个值

                  if(values.length == 1)

                  {

                     try

                     {

                         //调用toUTF(values[0])函数,(values[0]即第一个参数值)方法转换参数值的字元编码                         

                         String vlustr=toUTF(values[0]);

                         //并将该值以属性的形式藏在request

                         request.setAttribute(name, vlustr);

                     } catch (UnsupportedEncodingException e)

                     {

                         e.printStackTrace();

                     }

                  }

                  //如果参数值集中有多个值

                  else

                  {

                     //遍历参数值集

                     for(int i=0;i<values.length;i++)

                     {

                         try

                         {

                            //回圈依次将每个值调用toUTF(values[i])方法转换参数值的字元编码

                            String vlustr=toUTF(values[i]);

                            values[i] = vlustr;

                         } catch (UnsupportedEncodingException e)

                         {

                            e.printStackTrace();

                         }

                     }

                     //将该值以属性的形式藏在request

                     request.setAttribute(name, values);

                  }

              }

           }

 

       }

        //设置响应方式和支持中文的字元集

       response.setContentType("text/html;charset=UTF-8");  

 

       //继续执行下一个filter,无一下个filter则执行请求

       chain.doFilter(request, response);

    }

    

    /**

     * 销毁方法

     */

    public void destroy()

    {

       

    }

}

 然后再web.xml中配置。

<!-- 配置过滤器 -->

    <filter>

       <description>处理中文乱码过滤器</description>

       <filter-name>ProFilter</filter-name>

       <filter-class> com.util.filters.ProFilter</filter-class>

    </filter>

    <filter-mapping>

       <filter-name>ProFilter</filter-name>

       <url-pattern>*</url-pattern><!-- 过滤所有请求,注:tomcat5请用/* -->

    </filter-mapping>


很感谢,我抽时间去试一下,这么长一串,辛苦你了
0
小川mac
小川mac

引用来自“挑灯论剑”的答案

在tomcat中设置编码格式

 <Connector port="8080" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000"  useBodyEncodingForURI="true"
               disableUploadTimeout="true"  URIEncoding="utf-8" />
谢谢,这个我有设置,可是,依旧乱码。。。
0
小川mac
小川mac

引用来自“Gillian_Male”的答案

引用来自“挑灯论剑”的答案

在tomcat中设置编码格式

 <Connector port="8080" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000"  useBodyEncodingForURI="true"
               disableUploadTimeout="true"  URIEncoding="utf-8" />
还要设置一个filter过滤器,设置编码方式是UTF-8
嗯,我知道了,谢谢!
返回顶部
顶部