我有一个网站,可以使用Struts2和Hibernate,MySQL,使用Tomcat 6服务器从公司员工那里获得调查。这是获取事件问题的方法,事件的问题是使用UTF-8编码。这是我的代码:
public String getEventQuestion() {
try {
event = surveyEventController.getEvent(this.getId());
surveyQuestions = surveyQuestionController.getQuestion(this.getId());
if (surveyQuestions != null) {
return Constants.SUCCESS;
} else {
return Constants.FAIL;
}
} catch (Exception e) {
logger.error("[Exception]getSurvey: " + e.getMessage(), e);
return Constants.FAIL;
}
}
来自控制器的getQuestion方法:
@SuppressWarnings("unchecked")
public List<SurveyQuestion> getQuestion(Long eventID)
{
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
List<SurveyQuestion> listQuestion = null;
try
{
session.getTransaction().begin();
listQuestion = (List<SurveyQuestion>)session.createQuery("from SurveyQuestion where event_id="+eventID.toString()).list();
session.getTransaction().commit();
}
catch(Exception e)
{
logger.error("[Exception] getQuestion SurveyQuestion: ",e);
session.getTransaction().rollback();
}
if(listQuestion!=null && !listQuestion.isEmpty())
{
return listQuestion;
}
else
{
return null;
}
}
所有jsp页面编码也是UTF-8。
我第一次访问网站时,内容已按预期成功加载了UTF-8内容。
问题是我按F5刷新页面后,内容自动更改为非UTF-8编码。我调试并认识到当运行session.getTransaction()。commit()时,数据库会自动使用非UTF-8编码内容中的 listQuestion进行更新,也许是ISO或类似的东西,所有特殊字符都改为?我该如何解决这个问题?
答案 0 :(得分:0)
我假设我可以通过
定义字符编码<property name="connection.url">
jdbc:mysql://localhost:3306/survey?useUnicode=true&amp;characterEncoding=UTF-8;
</property>
但是当上面的内容不起作用时,我找到了另一个解决方案,在hibernate.cfg.xml中,你必须通过
定义hibernate字符编码<property name="hibernate.connection.characterEncoding">UTF-8</property>
它运作正常。感谢您对Roman C的支持。