当前位置: 代码迷 >> Java Web开发 >> javaweb向数据库写下mysql数据出现中文乱码
  详细解决方案

javaweb向数据库写下mysql数据出现中文乱码

热度:316   发布时间:2016-04-13 22:42:08.0
javaweb向数据库写入mysql数据出现中文乱码
找了一晚上都没找到原因,奇了怪了:我特意查了 
我是linux系统,表的编码方式是utf8;jsp的输入框编码方式也是utf8;
hibernate.cfg.xml中间有一句
hibernate.cfg.xml配置文件
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
应该也是utf8;
断点跟踪可以确认在hibernate之前肯定是正确的中文字符,也就是说问题大部分可能还是出在后面。
然后再命令行中直接插入汉字,没问题。。。问题在哪儿呢?

------解决思路----------------------
总结的几个乱码问题 希望我们全体学员也能够学会总结
java web 很是希望大家能够学好.并且也希望大家能够在学习过程中不段的积累相关的知识点

1、在response中写<meta  http-equiv="content-style-type"  content="text/html;charset=GB2312">  
   
2、使用new String(字符变量.getBytes("iso-8859-1"),"gb2312")   
    
3、在jsp中处理乱码问题如下解决
  String 变量名 =  "你好";  
  lPara  =  java.net.URLEncoder.encode(new String(变量名.getBytes("GBK"),"iso8859-1"));    
  <a   href="yourServlet?Para=<%=lPara%>">Test</a>  
  ...  
  yourServlet: 
  String lPara=request.getParameter("Para");   
    
4、在得到变量的值之前(request.getParameter("界面上的控件名字")),加上如下代码  
  response.setContentType("text/html;charset=gb2312");
  request.setCharacterEncoding("gb2312");
  respose.setCharacterEncoding("gb2312");

5、确保在servlet中中文处理代码(方法4中的3行代码)在PrintWriter对象之前
  PrintWriter out = response.getWriter();


6、如果1~5的操作都操作了还是乱码问题则:
注意在页面上单吉右键 --编码--给成中文(就OK)

7、要是如上1~6操作还是不能够解决中文问题则:
换个服务器操作即便(换个tom猫在发布或者使用jboss发布)

8、仅仅提供参考
Servlet 中文乱码解决【使用过滤器】 

my.EncodingFilter.java://创建类的名字

import java.io.IOException;//在该类中具体实现如下代码(拷贝过去)
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.UnavailableException;
public class EncodingFilter implements Filter {
   protected String encoding = null;   
   protected FilterConfig filterConfig = null;
      public void destroy() { 
            this.encoding = null;   
                this.filterConfig = null; 
                  } 
    public void doFilter(ServletRequest request, ServletResponse response,
         FilterChain chain)
         throws IOExceptionServletException {
   // Select and set (if needed) the character encoding to be used
         String encoding = selectEncoding(request);  
             if (encoding != null)        {    
                    request.setCharacterEncoding(encoding);
                           }
    // Pass control on to the next filter
           chain.doFilter(request, response); 
             }  
     public void init(FilterConfig filterConfig) throws ServletException {
     this.filterConfig = filterConfig; 
           this.encoding = filterConfig.getInitParameter("encoding");
               }  
      protected String selectEncoding(ServletRequest request) {
             return (this.encoding); 
               }
             }
 
再在web.xml的<web-apps>中加入如下内容  //在web.xml中实现如下代码
  <filter>
  <filter-name>Set Character Encoding</filter-name>
  <filter-class>my.EncodingFilter</filter-class>
  <init-param>
  <param-name>encoding</param-name>
  <param-value>GBK</param-value></init-param>
  </filter>
  <filter-mapping>
  <filter-name>Set Character Encoding</filter-name>
  <url-pattern>/*</url-pattern>
  </filter-mapping>

如上操作就可以解决乱码问题
注意:my.EncodingFilter是EncodingFilter这个类在我的工程中的位置


最后一个只建议不求操作

并且在学习的过程中要积累相关的错误。譬如:
404错误--请求资源找不到
400错误--可能是请求的方式问题
405错误--get/post和服务器端不匹配
500错误--程序有问题
注意积累...











 
 
------解决思路----------------------
引用:
如果提交到服务器端的时候还不是乱码,那就是mysql连接串的问题了。
 比如我用gbk的,连接串是:
jdbc:mysql://localhost:3306/test?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=gbk
那utf-8的应该就是
jdbc:mysql://localhost:3306/test?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=utf8

&amp;就是&符号,是我在xml文件里配置实用的,如果你不用xml配置,那直接写成&


正解  应该这么做 看了好多楼层
  相关解决方案