freemarker中文乱码的解决方案

2019-03-10 13:17|来源: 领悟书生

如果你用FreeMarker入门教程中的工具类FreemarkerUtil.java生成静态页面,有可能你会遇到中文乱码,我在自己的机器上不会,但上传到服务器上就出现了乱码


之前输出文件的代码如下:

/**
  * 输出到文件
  * @param name
  * @param root
  * @param outFile
  */
public void fprint(String name,Map<String,
                       Object> root,String outFile) {
    FileWriter out = null;
    try {
            //通过一个文件输出流,就可以写到相应的文件中
        out = new FileWriter(
                      new File("E:\\freemarker\\ftl\\"+outFile));
        Template temp = this.getTemplate(name);
        temp.process(root, out);
    } catch (IOException e) {
        e.printStackTrace();
    } catch (TemplateException e) {
        e.printStackTrace();
    } finally {
        try {
        if(out!=null) out.close();
        } catch (IOException e) {
        e.printStackTrace();
        }
    }
}

修改之后

public void fprint(String name,
        Map<String,Object> root,String outFile) {
    Writer out = null;
    try {
    //通过一个文件输出流,就可以写到相应的文件中
    out = new BufferedWriter(new OutputStreamWriter(  
                   new FileOutputStream(outFile), "UTF-8"));  
    Template temp = this.getTemplate(name);
    temp.setEncoding("UTF-8");
    temp.process(root, out);
    } catch (IOException e) {
        e.printStackTrace();
    } catch (TemplateException e) {
    e.printStackTrace();
    } finally {
    try {
            if(out!=null) out.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    }
}

看到原因了吧,也就是输出的时候也要设置编码


本文链接:freemarker中文乱码的解决方案,本文由huangyineng原创,转载请注明出处

相关问答

更多

mybatis中文乱码怎么解决?

调试看一下. 从页面上到Java程序中 是不是乱码.是的话就需要先处理. 不是的依次调试向下面看. 是哪里造成了乱码

mysql没有图形界面,中文乱码怎么解决?

如果my.ini和表字段都改成了GBK还是不行的话,那么应该是在安装的时候用了缺省安装,最好的方法是重装mysql。 在重装时,不要用缺省安装,然后选择GBK取代缺省的UTF8。安装完后,就一切正常不会出现乱码了。

mybatis中文乱码怎么解决?

调试看一下. 从页面上到Java程序中 是不是乱码.是的话就需要先处理. 不是的依次调试向下面看. 是哪里造成了乱码

mysql中如何解决中文乱码问题

找到mysql安装的根目录,找到mysql.ini 查找default-character-set 改成 default-character-set=gb2312 或 default-character-set=gbk

LINUX SSH显示中文乱码,如何解决?

ssh登陆后,执行: export LANG=zh_CN.gb2312 就可以显示中文了。 编辑/etc/sysconfig/i18n 将LANG="zh_CN.UTF-8" 改为 LANG="zh_CN.GB18030" 可永久显示中文

求助linux中文乱码解决方案。。。

乱码是因为使用的字符集不对。试试修改一下i18n这个文件: vim /etc/sysconfig/i18n,然后按i,将引号里面的内容改为 zh_CN.UTF-8或zh_CN.GBK,注销重登录。

求助linux中文乱码解决方案。。。

方框跟乱码不一样的,你要记住啊,方框是字体的原因导致的,修改fcitx的配置文件把里面的字体改成系统有的字体。。乱码是因为编码识别错误导致的,不是方块那种。。终端里面的话,你在终端上面的菜单里调一下编码就行了吧,点右键也能调编码的貌似。。

在使用ssh框架中,出现了 中文乱码问题 ,怎么解决?

解决乱码几小点: 1.配置过滤器,可以选择自己写,既然你用的SSH框架就更简单了,直接用Spring的过滤器,web.xml里配置一下即可。 2.Jsp页面设置编码,所有地方都要相同,我习惯用GBK <%@ page contentType="text/html;charset=GBK" %> 也可以使用HTML的页面编码配置 3.配置Tomcat(我们用,别的服务器另找)编码 在server.xml中配置,如: 4.如果还出现乱码,只能用这招了,我很少用 new String(s.getByte ...

filezilla里怎么解决中文乱码问题

以下为转载~Java中文问题一直困扰着很多初学者,如果了解了Java系统的中文问题原理,我们就可以对中文问题能够采取根本的解决之道。最古老的解决方案是使用String的字节码转换,这种方案问题是不方便,我们需要破坏对象封装性,进行字节码转换。还有一种方式是对J2EE容器进行编码设置,如果J2EE应用系统脱离该容器,则会发生乱码,而且指定容器配置不符合J2EE应用和容器分离的原则。在Java内部运算中,涉及到的所有字符串都会被转化为UTF-8编码来进行运算。那么,在被Java转化之前,字符串是什么样 ...

【求大神】bootstrap中文乱码

如果直接是html代码,可能是你文本存储出的问题,txt默认编码为ANSI,应该改为UTF-8。处理方法为用txt文本打开,选择另存为,此时下面编码选择框选UTF-8 如果是调用的数据库,就是数据库存储代码和你前端代码不一致。重新更改数据库存储类型就可以了。