表单提交后数据库插入数据出现乱码怎么解决

时间:2021-06-15 08:28:50
  在jsp中我是用utf-8编写的。
下面这个是处理乱码的但是数据库那边还是会出现乱码
package cn.com;
public class chStr {
        public String chStr(String str){
                if(str==null){
                        str="";
                }else{
                        try{
                                str=(new String(str.getBytes("iso-8859-1"),"UTF-8")).trim();
                        }catch(Exception e){
                                e.printStackTrace(System.err);
                        }
                }
                return str;
            }

       public String convertStr(String str1){
           if(str1==null){
               str1="";
           }else{
               try{
                 str1=str1.replaceAll("<","&lt;");
                 str1=str1.replaceAll(">","&gt;");
                 str1=str1.replaceAll(" ","&nbsp;");
                 str1=str1.replaceAll("\r\n","<br>");
               }catch(Exception e){
                       e.printStackTrace(System.err);
               }
           }
           return str1;
       }
}

17 个解决方案

#1


首先用System.out.println()在Servlet里面输出下中文,如果不是乱码,说明不是jsp向Servlet传值乱码,那就是数据库的原因了。因为数据库中的表也有它的编码方式的。

#2


tomcat--conf--server.xml
找到<connector port="8080" 后面加上URIEncoding="utf-8"  />

#3



 <Connector port="8088" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" URIEncoding=""UTF-8/>

#4


我在登陆页面的时候有写一句
在servlet中有写System.out.print("登录成功!欢迎"+request.getParameter("username")+"光临本系统!");这么一句,登陆后在Consele显示出来的不是乱码。
这样确定不是传值乱码。
而且我在插入数据之后,在网页上是可以显示我插入的数据,那边也显示也不是乱码。
只有查看数据库的时候那边才显示乱码。

#5


看看你数据库是什么编码

#6


上面两位朋友说在 <Connector port="8088" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" URIEncoding="UTF-8"/>加上URIEncoding="UTF-8"我试了一下,加进去后,在重启tomcat但是还是出现一样的情况。

#7


怎样查看数据库的编码啊???
有人说数据库不支持“utf-8”是真的还是假的啊

#8


怎样查看数据库编码啊??? 有人说数据库不能用"UTF-8"是真的还是假的啊。

#9


数据库跟java后台的编码格式不一样,看看你取出来的是不是乱码,不是的话,就没有很大关系,是的话,再取的时候转下格式。

#10


你用的什么数据库,我才能告诉你怎么设置编码啊

#11


SQL 2005

#12


1.表单提交是不是用post方式;
2.有没有用ajax技术提交数据;
3.调教到action或servlet中,在插入到数据库前输出下,看看是否正常;
4.直接在数据库中插入你所提交的内容,看看是否正常;

#13


要看你的提交方式:
get方式:
       在tomcat的service.xml中加一个URIEncoding="UTF-8",如下:
        <Connector port="8088" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" URIEncoding=""UTF-8/>
post方式:
1.先写一个过滤器类:
package com.idesvo.filter;

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;

public class EncodeFilter implements Filter {

private String encoding="";public void destroy() {
   // TODO Auto-generated method stub

public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
   // TODO Auto-generated method stub
   request.setCharacterEncoding(encoding);
   chain.doFilter(request, response);
}

public void init(FilterConfig config) throws ServletException {
   // TODO Auto-generated method stub
   encoding=config.getInitParameter("encoding");
}
}

2.再在web.xml中建关联这处过滤就OK了:
<filter>
<filter-name>encoding</filter-name>
<filter-class>com.idesvo.filter.EncodeFilter</filter-class>
<init-param>
<param-name>encoding</param-name> 
<param-value>UTF-8</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

#14


补充一下,我给的这个filter-mapping应该放在所有filter-mapping的上面。
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

#15


要不要写个过滤器呢?

#16


my921 谢了,三楼的你回答的,我的问题解决了,谢谢啊

#17


我也出现过这种错误,把所有的编码全部设为gb2312就好了。

#1


首先用System.out.println()在Servlet里面输出下中文,如果不是乱码,说明不是jsp向Servlet传值乱码,那就是数据库的原因了。因为数据库中的表也有它的编码方式的。

#2


tomcat--conf--server.xml
找到<connector port="8080" 后面加上URIEncoding="utf-8"  />

#3



 <Connector port="8088" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" URIEncoding=""UTF-8/>

#4


我在登陆页面的时候有写一句
在servlet中有写System.out.print("登录成功!欢迎"+request.getParameter("username")+"光临本系统!");这么一句,登陆后在Consele显示出来的不是乱码。
这样确定不是传值乱码。
而且我在插入数据之后,在网页上是可以显示我插入的数据,那边也显示也不是乱码。
只有查看数据库的时候那边才显示乱码。

#5


看看你数据库是什么编码

#6


上面两位朋友说在 <Connector port="8088" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" URIEncoding="UTF-8"/>加上URIEncoding="UTF-8"我试了一下,加进去后,在重启tomcat但是还是出现一样的情况。

#7


怎样查看数据库的编码啊???
有人说数据库不支持“utf-8”是真的还是假的啊

#8


怎样查看数据库编码啊??? 有人说数据库不能用"UTF-8"是真的还是假的啊。

#9


数据库跟java后台的编码格式不一样,看看你取出来的是不是乱码,不是的话,就没有很大关系,是的话,再取的时候转下格式。

#10


你用的什么数据库,我才能告诉你怎么设置编码啊

#11


SQL 2005

#12


1.表单提交是不是用post方式;
2.有没有用ajax技术提交数据;
3.调教到action或servlet中,在插入到数据库前输出下,看看是否正常;
4.直接在数据库中插入你所提交的内容,看看是否正常;

#13


要看你的提交方式:
get方式:
       在tomcat的service.xml中加一个URIEncoding="UTF-8",如下:
        <Connector port="8088" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" URIEncoding=""UTF-8/>
post方式:
1.先写一个过滤器类:
package com.idesvo.filter;

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;

public class EncodeFilter implements Filter {

private String encoding="";public void destroy() {
   // TODO Auto-generated method stub

public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
   // TODO Auto-generated method stub
   request.setCharacterEncoding(encoding);
   chain.doFilter(request, response);
}

public void init(FilterConfig config) throws ServletException {
   // TODO Auto-generated method stub
   encoding=config.getInitParameter("encoding");
}
}

2.再在web.xml中建关联这处过滤就OK了:
<filter>
<filter-name>encoding</filter-name>
<filter-class>com.idesvo.filter.EncodeFilter</filter-class>
<init-param>
<param-name>encoding</param-name> 
<param-value>UTF-8</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

#14


补充一下,我给的这个filter-mapping应该放在所有filter-mapping的上面。
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

#15


要不要写个过滤器呢?

#16


my921 谢了,三楼的你回答的,我的问题解决了,谢谢啊

#17


我也出现过这种错误,把所有的编码全部设为gb2312就好了。