关于t.page的Freemarker utf-8编码问题

我在内页有问题。 它只是将页面识别为iso,但我想要utf-8,我将其声明为默认字符集。 我在freemarker配置上尝试了一些修改,但它们没有效果。

为spring-servlet.xml

   

template.html

      Cemitério - Prefeitura Municipal de Maringá   Usuários     

的login.html

    ${erroLogin}  


产量

在此处输入图像描述

由于重音符号在插入的变量中都是正确的,但直接输入到模板中的重音符号没有,并且浏览器似乎知道该页面使用UTF-8(您可以在浏览器的页面信息对话框中查看) ,要么:

  • 模板文件使用错误的编码保存。 在Eclipse中,您应该转到Window – > Preferences – > Workspace,并将文本文件编码设置为UTF-8。 这是一个全局设置,但默认情况下Eclipse使用平台默认值,这在99%的项目中没有意义。 您也可以在Project – > Properties – > Resource下的项目级别设置它。

  • FreeMarker使用了错误的字符集来解码模板文件,因为默认情况下它也使用默认的平台。 因此,您应将default_encoding设置为UTF-8 。 您还可以使用<#ftl encoding='UTF-8'>强制模板中的<#ftl encoding='UTF-8'>

如果你添加这个charset =“UTF-8”怎么样?

  

在HTML 5中,您将添加:

  

在以前的HTML中(注意你的代码中有小写的内容……也许可能对它有贡献)

  

我找到了解决方案。 我需要使用dreamweaver再次创建login.html文件,然后保存为html并将文件粘贴到eclipse项目中。

在某些情况下,您可能希望对实体进行编码。 如果您正在使用Java对象作为模板的数据(上下文),则可以在其中添加一个方法来编码实体:

 public String htmlEntities(String input) { StringBuilder sb = new StringBuilder(input.length()); for (char c : input.toCharArray()) { if (c == '"') { sb.append("""); } else if (c == '<') { sb.append("<"); } else if (c == '>') { sb.append(">"); } else if (c < 128) { sb.append(c); } else { sb.append(String.format("&#x%04x;", (int) c)); } } return sb.toString(); } 

这可以在您的模板中使用,如:

 ${htmlEntities('Usuário')} 

结果将是:

 Usuário