Java JSoup似乎忽略了字符代码?

Java JSoup似乎忽略了字符代码?,java,html,regex,arraylist,jsoup,Java,Html,Regex,Arraylist,Jsoup,我正在用Java构建一个类似CMS的小应用程序,它接受一个带有衬衫名称/描述的.txt文件,并将名称/描述加载到customShirts的ArrayList中(我制作的小类)。然后,它遍历ArrayList,并使用JSoup解析模板(template.html)并将衬衫的独特细节插入html。最后,它将每件衬衫输出到输出文件夹中自己的HTML文件中 当描述加载到customShirts的ArrayList中时,我会用适当的字符代码替换所有特殊字符,以便它们可以正确显示(例如,将撇号替换为“)。问

我正在用Java构建一个类似CMS的小应用程序,它接受一个带有衬衫名称/描述的.txt文件,并将名称/描述加载到customShirts的ArrayList中(我制作的小类)。然后,它遍历ArrayList,并使用JSoup解析模板(template.html)并将衬衫的独特细节插入html。最后,它将每件衬衫输出到输出文件夹中自己的HTML文件中

当描述加载到customShirts的ArrayList中时,我会用适当的字符代码替换所有特殊字符,以便它们可以正确显示(例如,将撇号替换为“)。问题是,我注意到JSoup似乎会自动将字符代码转换为实际字符,这是一个问题,因为我需要可显示的输出(需要字符代码)。我能做些什么来解决这个问题吗?我已经研究了其他解决方法,如at:,但它们似乎需要在使用replaceAll插入之前解析文件,我使用JSoup插入字符代码敏感文本,这似乎并没有使这成为一个选项

下面是我制作的HTML生成器的代码:

public void generateShirtHTML(){

    for(int i = 0; i < arrShirts.size(); i++){

        File input = new File("html/template/template.html");
        Document doc = null;
        try {
            doc = Jsoup.parse(input, "UTF-8", "");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            }

        Element title = doc.select("title").first();
        title.append(arrShirts.get(i).nameToCapitalized());

        Element headingTitle = doc.select("h1#headingTitle").first();
        headingTitle.html(arrShirts.get(i).nameToCapitalized());

        Element shirtDisplay = doc.select("p#alt1").first();
        shirtDisplay.html(arrShirts.get(i).name);

        Element descriptionBox = doc.select("div#descriptionbox p").first();
        descriptionBox.html(arrShirts.get(i).desc);
        System.out.println(arrShirts.get(i).desc);

        PrintWriter output;
        try {
            output = new PrintWriter("html/output/" + arrShirts.get(i).URL);
            output.println(doc.outerHtml());
            //System.out.println(doc.outerHtml());
            output.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        System.out.println("Shirt " + i + " HTML generated!");

    }

}
public void generateShirtHTML(){
对于(int i=0;i

提前谢谢

对我的评论稍作扩展(因为斯蒂芬鼓励我……),你可以使用

doc.outputSettings().escapeMode(Entities.EscapeMode.extended);
要告诉Jsoup对输出中的特殊字符进行转义/编码,例如将双引号(
)保留为
&ldquo;
。要使Jsoup对所有特殊字符进行编码,您可能还需要添加

doc.outputSettings().charset("ASCII");
为了确保所有Unicode特殊字符都是HTML编码的


对于需要将数据填充到HTML文件中的大型项目,您可以考虑使用模板引擎,例如-它更容易用于此类工作(代码更少等等),并且它提供了许多专门用于此过程的功能。对于小型项目(如您的项目),Jsoup是不错的(我在过去就这样使用过),但对于大型项目(甚至是小的)项目,您需要研究一些更专门的工具。

检查;您可以尝试类似于
doc.outputSettings().escapeMode(Entities.escapeMode.extended);
的方法。如果这不起作用,您可以在从Jsoup获取HTML后尝试转义它,请参阅(我了解到这正是您想要做的,对吗?例如,在输出中将引号替换为
)。此外,您可能需要研究一个模板引擎,例如,对于这种类型的ting,这将是一个比Jsoup更合适的选项。非常感谢,我添加了Document.OutputSettings=doc.OutputSettings();settings.prettyPrint(false);settings.escapeMode(Entities.escapeMode.extended);settings.charset(“ASCII”);成功了!谢谢!@JonasCz请将您的评论转化为答案,并让OP发送您反对的代表。下次,不要羞于发布答案!评论不是回答的地方。@Stephan,谢谢您的鼓励:-)我没有把它作为一个答案发布,因为我不知道我的想法是否能解决问题,我也不认为它是真正完整的(我也不完全确定这是OP想要的)。但我已经把它扩展为一个答案。还有一件事:我不反对你接受我的评论并把它变成一个答案(无论如何,我并不太在乎销售代表……),对我来说,接受一个不完整的评论,或者不打算回答问题,然后将其作为答案发布,这似乎很奇怪:-)