1. SQL的语言集,选择Chinese_PRC开头的就行, SQL 表tb_User字段,常规的Varchar即可。可以先行手工直接在SQL表中输入不会是乱码。
CREATE TABLE [dbo].[tb_User](
[user_id] [int] IDENTITY(1,1) NOT NULL,
[user_name] [varchar](50) NULL,
[user_password] [varchar](50) NULL,
[user_age] [int] NULL,
[user_country] [varchar](50) NULL,
2. jsp页面,编码为UTF-8即可,Eclipse默认即可,页面如下图所示:
3.前台到后端的编码转换。前台页面传递到后台页面时,因编码不一致,后台获取到的是乱码,需要做一次转换,再传递至数据处理或者其他页面中,如下颜色标注,此处转换主要是解决controller返回Model时,返回的页面乱码问题,跟数据库存储没有关系,数据库存储在数据层处理转换即可。
@RequestMapping(value = "/Register.action", method = RequestMethod.POST)
public String RegisterUser(@ModelAttribute("user")User user, ModelMap model) throws UnsupportedEncodingException
{
String name=user.getUser_name();
String password=user.getUser_password();
name=new String(name.getBytes("ISO-8859-1"),"UTF-8");//change the code
if(name!="" && password!="")
{
User newUser= myUser.getUserByName(name);
if(newUser==null)
{
if(myUser.AddUser(user))
{
System.out.println("--------register ok-------------");
model.addAttribute("user_name",name);
model.addAttribute("user_password",password);
return "result";//to result.jsp
}
else
{
System.out.println("------------register failed-------------");
return "UserRegister";//stay at current page
}
}
}
else
{
return "UserRegister";//stay at current page
}
return "UserRegister";
}
4. 在Hibernate数据存储之前再执行一次转换,即后台数据存储之前执行一次转换,转换为UTF8。
public boolean AddUser(User user)
{
// TODO Auto-generated method stub
Session session = this.sessionFactory.getCurrentSession();
String convertStr;
try
{
convertStr=new String(user.getUser_name().getBytes("ISO-8859-1"),"UTF-8");
user.setUser_name(convertStr);
}
catch(Exception ex)
{
System.out.println("-------convert failed");
}
session.persist(user);//save user
return true;
}
5. SQL插入后显示,此时显示正常。