在Struts 2中启动服务器时如何在动作类中获得UTF-8文本?

时间:2013-03-26 02:49:35

标签: java jsp utf-8 struts2 character-encoding

我正在使用Hibernate开发Struts2的Web应用程序。

但我有一个问题,当我启动服务器并加载网站时,我的调用中的加载方法将被调用。但是,它无法加载UTF-8,而不是"Phương"我得到"PH??NG"但是在JSP页面中仍然显示"Phương"。所以,当我执行我的SQL查询时(来自Posts WHERE主题,如'%PH??NG PHÁP GIÁO D?C TR?%',所以我无法查询我的数据库!

我的动作课在这里!

public class PostsAction extends ActionSupport {
private List<HomeTopic> homeTopics = new ArrayList<HomeTopic>();
public List<HomeTopic> getHomeTopics() {
    return homeTopics;
}

public void setHomeTopics(List<HomeTopic> homeTopics) {
    this.homeTopics = homeTopics;
}


public void callHomeTopics(){
     Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction trans = session.beginTransaction();
    String[] list = {"NEW – TIN TỨC TRẺ","Khu Vui Chơi Cho Trẻ","PHƯƠNG PHÁP GIÁO DỤC TRẺ","KỸ NĂNG – KINH NGHIỆM","Phòng Bệnh","Tập Tô Màu"};
    for (int i = 0; i < list.length; i++) {
            getTopics(session, trans, list[i]);
        }
trans.commit();
    session.close();
}

public void getTopics(Session session, Transaction trans, String type) {
    String hql = "from Posts WHERE topics like '%" + type + "%'";
    System.out.println("HQL: " + hql);
    Query query = session.createQuery(hql);
    query.setMaxResults(3);
    List<Posts> t = (ArrayList<Posts>) query.list();
    HomeTopic h = new HomeTopic(type, t);
    System.out.println("List topics: " + type + " " + t);
    homeTopics.add(h);
    session.flush();
}

HomeTopics.java类

 public class HomeTopic {

    private String nameTopic;
    private List<Posts> postList;

    public List<Posts> getPostList() {
        return postList;
    }

    public void setPostList(List<Posts> postList) {
        this.postList = postList;
    }

    public HomeTopic(String nameTopic, List<Posts> postList) {
        this.nameTopic = nameTopic;
        this.postList = postList;
    }

    public HomeTopic() {
    }

    @Override
    public String toString() {
        return "HomeTopic{" + "nameTopic=" + nameTopic + ", postList=" + postList + '}';
    }

    public String getNameTopic() {
        return nameTopic;
    }

    public void setNameTopic(String nameTopic) {
        this.nameTopic = nameTopic;
    }
}

当我写主要方法进行测试时!它仍然显示UTF-8。但每当我启动服务器并在浏览器中调用callHomeTopics()方法时,文本将为"PH??NG PHÁP GIÁO D?C TR?"

但是在JSP页面中仍然显示"Phương Pháp Giáo Dục Trẻ"。 除了我的HQL查询,一切都还可以。

3 个答案:

答案 0 :(得分:1)

由于您(为了测试目的,我认为)硬编码您的值,而不是从数据库或网页中读取它们,您需要确保您用于在页面中插入它们的IDE正在工作在UTF-8;

在Eclipse中,转到 Window - &gt; 偏好设置 - &gt; 一般 - &gt; 工作区 - &gt; 文本文件编码 - &gt; 其他 - &gt; UTF-8

在打印到控制台时也需要查看正确的值。

当您从JSP或数据库中读取值时,请注意字符编码,并确保使用

byte[] utf8Bytes = myString.getBytes("UTF-8");

用于编码,

String myString = new String(utf8Bytes, "UTF-8")

用于解码。

http://docs.oracle.com/javase/tutorial/i18n/text/string.html

答案 1 :(得分:0)

要在JSP中正确显示字符到相应的编码,您应该使用JSP page指令并指定带编码的contentType。例如

<%@ page contentType="text/html;charset=UTF-8" %>

这将在页面上以UTF-8编码显示字符。

答案 2 :(得分:-1)

为您的法语字符使用相应的utf代码,而不是直接使用它们。 例如

use &#233; for é

希望这会有所帮助