关于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