jsp插入数据库乱码 中文的参数怎么处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jsp插入数据库乱码 中文的参数怎么处理相关的知识,希望对你有一定的参考价值。

a.jsp?name=张三 插入数据库出现乱码

1、JSP页面乱码
这种乱码的原因是应为没有在页面里指定使用的字符集编码,解决方法:只要在页面开始地方用下面代码指定字符集编码即可,
2、数据库乱码
这种乱码会使你插入数据库的中文变成乱码,或者读出显示时也是乱码,解决方法如下: 在数据库连接字符串中加入编码字符集 String
Url="jdbc:mysql://localhost/digitgulf?user=root&password=root&useUnicode=true&characterEncoding=GB2312";
并在页面中使用如下代码:
response.setContentType("text/html;charset=gb2312"); request.setCharacterEncoding("gb2312");
3、中文作为参数传递乱码
当我们把一段中文字符作为参数传递个另一页面时,也会出现乱码情况,解决方法如下: 在参数传递时对参数编码,比如
RearshRes.jsp?keywords=" + java.net.URLEncoder.encode(keywords) 然后在接收参数页面使用如下语句接收
keywords=new String(request.getParameter("keywords").getBytes("8859_1"));
response.sendRedirect("?gh=0001&xm=" + java.net.URLEncoder.encode("忘忧草")); String s=new String(request.getParameter("xm").getBytes("ISO8859_1"),"gb2312"); out.println(s);
4、JSP页面乱码加这句?
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="err.jsp" %>
5、在form中用get方法传参乱码解决方法 如: 1、 login.jsp

<%@ page language="java" contentType="text/html;charset=GBK"%> <html> <head>
<title>get传参乱码问题</title> </head> <body>
<form name="form1" action="login_do.jsp" method="GET"> <input type="text" name="username"/><br>
<input type="password" name="password"/><input type="submit" value="提交"/> </form> </body> </html> ============ 2、login_do.jsp
<%@ page language="java" contentType="text/html;charset=GBK"%> <%
String temp=request.getParameter("username"); if(temp!=null) temp=new String(temp.getBytes("8859_1"),"GBK");
out.println(temp); %>
参考技术A get形式,参数中中文要编码,java.net.Encoder,插入数据库要java.net.Decoder还原数据追问

我在插入数据库前把sql语句out.println,看了下,是正常的中文。因为我已经解码了,将%A%B这样的中文转成utf8,但不知道为什么插入数据库就成了%A%C%D这样的,我的数据库是mysql utf8编码。

参考技术B 打印一下页面接受信息之后,插入数据库之前是不是已经乱码,插入数据库之前不是乱码的话,将数据库的编码格式改成你页面中的编码格式,否则,你页面中的编码格式改为UTF-8或者GBK追问

我在插入数据库前把sql语句out.println,看了下,是正常的中文。因为我已经解码了,将%A%B这样的中文转成utf8,但不知道为什么插入数据库就成了%A%C%D这样的,我的数据库是mysql utf8编码。 页面中改成utf-8后,中文字符显示不正常了。

追答

就是说你以前写代码的时候数据库和页面的编码格式不一样,现在改成一样的了,就成乱码了,现在讲jsp页面中的乱码改成你需要的文字就行了

本回答被提问者采纳
参考技术C a.jsp?name=张三
这是一个向另一个页面发送请求,并传递参数,但参数你用的是中文,所以要进行格式转换,给你个参考http://blog.csdn.net/joywy/article/details/8006645
参考技术D 使用UTF-8编码。追问

我在插入数据库前把sql语句out.println,看了下,是正常的中文。因为我已经解码了,将%A%B这样的中文转成utf8,但不知道为什么插入数据库就成了%A%C%D这样的,我的数据库是mysql utf8编码。

如何使用过滤器处理中文乱码

如果浏览器提交数据给Servlet的时候含中文参数,那么在Servlet中就要处理中文乱码。如果有多个Servlet都要同时接收中文参数,那么在Servlet中处理中文乱码就比较麻烦。

解决办法:使用过滤器处理中文乱码。

技术分享图片

 处理post请求的乱码

index.jsp代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
  <form action="${pageContext.request.contextPath }/AddUserServlet" method="post">
    用户名:<input type="text" name="userName" /><br>
    <input type="submit" value="提交" />
  </form>
  <hr>
  <form action="${pageContext.request.contextPath }/AddProductServlet" method="post">
    产品名:<input type="text" name="productName" /><br>
    <input type="submit" value="提交" />
  </form>

</body>
</html>

AddUserServlet.java类代码(Servlet 业务处理)

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class AddUserServlet
 */
@WebServlet("/AddUserServlet")
public class AddUserServlet extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取文本框输入参数
        String userName=request.getParameter("userName");
        System.out.println("userName="+userName);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

AddProductServlet.java类代码(Servlet 业务处理)

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class AddProductServlet
 */
@WebServlet("/AddProductServlet")
public class AddProductServlet extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取文本框输入参数
        String productName=request.getParameter("productName");
        System.out.println("productName="+productName);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

 创建一个CharacterEncodingFilter类来实现Filter接口,并实现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 CharacterEncodingFilter implements Filter {

    @Override
    public void destroy() {
        // TODO Auto-generated method stub

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        request.setCharacterEncoding("utf-8");
        chain.doFilter(request, response);

    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub

    }

}

web.xml配置:

技术分享图片

结果:

技术分享图片

如果要处理Get请求的中文乱码,这时候需要对request对象进行增强处理。

 

 

以上是关于jsp插入数据库乱码 中文的参数怎么处理的主要内容,如果未能解决你的问题,请参考以下文章

Java项目往数据库中插入数据,出现中文乱码

PHP插入数据到数据库出中,中文出现乱码~~全是问号

关于从JSP页面插入数据到数据库中乱码问题的解决

JSP之mysql中文乱码问题

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

mysql 数据库乱码问题,页面,数据库都是UTF-8 的字符集,为啥INSERT INTO插入后会是乱码呢?