Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Struts 2中启动服务器时,如何在action类中获取UTF-8文本?_Java_Jsp_Utf 8_Struts2_Character Encoding - Fatal编程技术网

Java 在Struts 2中启动服务器时,如何在action类中获取UTF-8文本?

Java 在Struts 2中启动服务器时,如何在action类中获取UTF-8文本?,java,jsp,utf-8,struts2,character-encoding,Java,Jsp,Utf 8,Struts2,Character Encoding,我正在使用Hibernate通过Struts2开发一个web应用程序 但我有一个问题,当我启动服务器并加载网站时,我的加载方法将被调用。但是,它不能加载UTF-8,而不是“Phương”我得到“Phơng”,但在JSP页面中仍然显示“Phơng”。因此,当我执行SQL查询时,它是(从主题为'%PH??NG PHÁP GIÁO D?C TR?%'的帖子中),因此我无法查询我的数据库 我的动作课在这里 public class PostsAction extends ActionSupport {

我正在使用Hibernate通过Struts2开发一个web应用程序

但我有一个问题,当我启动服务器并加载网站时,我的加载方法将被调用。但是,它不能加载UTF-8,而不是
“Phương”
我得到
“Phơng”
,但在JSP页面中仍然显示
“Phơng”
。因此,当我执行SQL查询时,它是(从主题为
'%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();
}
公共类PostsAction扩展了ActionSupport{
private List homeTopics=new ArrayList();
公共列表getHomeTopics(){
返回主页主题;
}
public void setHomeTopics(列出homeTopics){
this.homeTopics=homeTopics;
}
public void callHomeTopics(){
Session Session=HibernateUtil.getSessionFactory().openSession();
Transaction=session.beginTransaction();
字符串[]列表={“新建–TIN TỨC TRẺ","胡维奇巧ẻ","PHƯNG PHÁP GIÁO DỤC TRẺ","KỸ NĂNG–KINH NGHIỆM”,“Phòng Bệ新罕布什尔州ậpôMáu“};
for(int i=0;i
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;
    }
}
公共类HomeTopic{
私有字符串名称主题;
私有列表postList;
公共列表getPostList(){
返回postList;
}
公共void setPostList(列表postList){
this.postList=postList;
}
公共HomeTopic(字符串名称Topic、列表postList){
this.nameTopic=nameTopic;
this.postList=postList;
}
公共主页主题(){
}
@凌驾
公共字符串toString(){
返回“HomeTopic{“+”nameTopic=“+nameTopic+”,postList=“+postList+”}”;
}
公共字符串getNameTopic(){
返回名称主题;
}
public void setNameTopic(字符串nameTopic){
this.nameTopic=nameTopic;
}
}
当我编写main方法进行测试时,它仍然显示UTF-8。但每当我启动服务器并在浏览器中调用
callHomeTopics()
方法时,文本将是
“PH??NG PHÁp GIÁO D?C TR?”

但在JSP页面中仍然显示“Phương Pháp Giáo D”ục Trẻ"
除了我的HQL查询,一切正常。

对法语字符使用相应的utf代码,而不是直接使用它们。 比如说

use &#233; for é

希望这有助于

在JSP中正确显示对应编码的字符。您应该使用JSP
页面
指令并使用编码指定
内容类型

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

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

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

在Eclipse中,转到窗口->首选项->常规->工作区->文本文件编码->其他->UTF-8

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

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

byte[] utf8Bytes = myString.getBytes("UTF-8");
用于编码,以及

String myString = new String(utf8Bytes, "UTF-8")
用于解码


在jsp页面中仍然显示UTF-8!jsp是一个java服务器页面,而不是编辑器中显示的页面。您从数据库中获得正确的结果吗?您的意思是
系统在IDE或服务器控制台中打印错误的字符吗?您的第一部分还可以,但代码错误得可怕,我无法否决。您的代码即使在你链接的页面上,这个变量也被称为
roundTrip
。那么第一部分应该是+1,第二部分应该是-1:D说真的,我不明白你的意思:它们显然是两段不同的代码,不要被唯一的代码格式块:/Ok,我现在明白了……行中使用的代码(往返)并不少见,尽管它没有任何用处,所以我假设您也犯了同样的错误。我编辑了它以使其更清楚,现在它应该是+1:)是的,可能是我的错误,没有完全清楚;)谢谢