网上的各种方法我都试过了
什么my.ini,
还有 request.setCharacterEncoding("UTF-8");//处理编码
response.setCharacterEncoding("UTF-8");//处理编码
以及public String handleString(String s) {
try{
byte bb[] =s.getBytes("UTF-8");
s=new String(bb);
}
catch(Exception ee){
}
return s;
}
最后的String uri="jdbc:mysql://127.0.0.1/zbsjk?"+"user=root&password=123456&characterEncoding=utf8";
都解决不了,难道我要重装mysql吗!!!!QUQ
你说jsp没问题,那我问你你的jsp页面的字符集是UTF-8吗,还有post请求不需要转码的,get请求数据时候才用到你上面的方法,我自己post数据进去都是好的,只要get请求时候才会采用new String(str.getByte("iso-8859-1"),"utf-8");来进行转码
数据库的my.cnf 里加上 character-set-server=utf8 ,然后重启mysql服务。
既然不是程序和连接字符串的问题,那就看看是不是mysql的问题;
查看数据库编码:
show variables like '%char%';
修改字符编码:
set global character_set_database=utf8;
set global character_set_server=utf8;
show variables like '%char%';
[mysqld]
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
你的数据传到servlet里面是正常的吗 还是servlet数据正常在传到数据库才乱码的
web.xml中的servlet过滤路径是不是写错了 /*
后台的数据类型,数据库引擎,数据库类型长度的大小,数据库编码等等都有可能
characterEncoding=gb2312 换成这个试试
设置项目的编码为utf-8试试
数据库和表的字符集设置了吗?
首先你断点看看是不是,java里的数据,传到数据库之前乱码了吗?
如果没有没乱,那就是 数据设置的问题,如果乱码了那就是你java程序的问题
数据库类型的问题吧?。看一下数据库类型有没有问题。
- package servlet;
- import flogin.rigister;
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.sql.*;
- import java.io.*;
- import javax.servlet.*;
- import javax.servlet.http.*;
- import java.util.*;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class HandleRegister extends HttpServlet {
- public void init(ServletConfig config) throws ServletException{
- super.init(config);
- try{
- Class.forName("com.mysql.jdbc.Driver");
- }
- catch(Exception e){
- }
- }
- public String handleString(String s) {
- try{
- byte bb[] =s.getBytes("iso-8859-1");
- s=new String(bb);
- }
- catch(Exception ee){
- }
- return s;
- }
- /**
- * The doGet method of the servlet.
- *
- * This method is called when a form has its tag value method equals to get.
- *
- * @param request the request send by the client to the server
- * @param response the response send by the server to the client
- * @throws ServletException if an error occurred
- * @throws IOException if an error occurred
- */
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doPost(request,response);
- }
- /**
- * The doPost method of the servlet.
- *
- * This method is called when a form has its tag value method equals to post.
- *
- * @param request the request send by the client to the server
- * @param response the response send by the server to the client
- * @throws ServletException if an error occurred
- * @throws IOException if an error occurred
- */
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- String uri="jdbc:mysql://127.0.0.1/zbsjk?"+"user=root&password=123456&characterEncoding=utf8";
- Connection con;
- PreparedStatement sql;
- rigister userBean=new rigister();
- request.setAttribute("userBean", userBean);
- String logid=request.getParameter("id").trim(),
- pwd=request.getParameter("pwd").trim(),
- pw2=request.getParameter("pwd2").trim(),
- phone=request.getParameter("tel").trim(),
- realname=request.getParameter("realname").trim(),
- add=request.getParameter("addr1")+request.getParameter("addr2"),
- skill=request.getParameter("skill"),
- birth=request.getParameter("birth"),
- belif=request.getParameter("introduce"),
- sex=request.getParameter("gender");
- if(logid==null)
- logid="";
- if(pwd==null)
- pwd="";
- if(!pwd.equals(pw2)){
- userBean.setBackNews("两次密码不同。注册失败");
- RequestDispatcher dispatcher=request.getRequestDispatcher("/Rigister.jsp");
- dispatcher.forward(request,response);
- return;
- }
- boolean isLD=true;
- for(int i=0;i<logid.length();i++){
- char c=logid.charAt(i);
- if(!((c<'z'&&c>='a')||(c<='Z'&&c>='A')||(c<='9'&&c>='0')))
- isLD=false; //判断由英文字母+数字组成
- }
- boolean boo=logid.length()>0&&pwd.length()>0&&isLD;
- String backNews;
- try{
- con=DriverManager.getConnection(uri);
- String insertCondition="INSERT INTO J VALUES(?,?,?,?,?,?,?,?,?)";
- sql=con.prepareStatement(insertCondition);
- if(boo){
- sql.setString(1, handleString(logid));
- sql.setString(2, handleString(realname));
- sql.setString(3, handleString(pwd));
- sql.setString(4, handleString(phone));
- sql.setString(5, handleString(sex));
- sql.setString(6, handleString(birth));
- sql.setString(7, handleString(add));
- sql.setString(8, handleString(belif));
- sql.setString(9, handleString(skill));
- int m=sql.executeUpdate();
- if(m!=0){
- response.setContentType("text/html;charset=utf-8");
- PrintWriter out=response.getWriter();
- out.println("");
- out.println("注册成功,跳转登陆");
- out.println(handleString(realname));
- out.println("");
- }
- }
- else{
- RequestDispatcher dispatcher=request.getRequestDispatcher("/Rigister.jsp");
- dispatcher.forward(request,response);
- backNews="信息填写不完整或名字中有非法字符";
- userBean.setBackNews(backNews);
- }
- con.close();
- }
- catch(SQLException exp){
- response.setContentType("text/html;charset=utf-8");
- PrintWriter out=response.getWriter();
- out.println("");
- out.println(exp);
- out.println("");
- }
- }
- /**
- * Initialization of the servlet.
- *
- * @throws ServletException if an error occurs
- */
- public void init() throws ServletException {
- // Put your code here
- }
- }
这是我的servlet代码,前面的jsp感觉是没有问题的,我用action method用post
传到数据库是出现???,还是乱码,如果是????的话,String uri这里还要加上useUnicode=true
应该是数据编码设置出现问题,设置characterEncoding=gb2312 /utf-8
数据库在创建表的时候要设置字符集是UTF-8,你可以现在数据库里面直接添加记录看看是不是能添加进去汉字
最后一种方式是对的,不过,写法不是这样的,先检查你的Servlet的字符设置是否正确; 然后就看MyQL或者Orcle数据库链接操作的地方,写一个characterEncoding=UTF-8;
而不是在传参的时候写,这样也会很累, 总的来说你写错了位置,去找数据库连接的代码,在后面加上。去吧!