为什么变量名中的特殊字符会报错?
Why Special Character in Variable Name Gives Error?
我有以下 freemarker 文件:
<#ftl strip_whitespace="true">
...
<#assign wän = ...>
如果我在一台服务器上 运行 这样的 freemarker,它运行良好,如果我 运行 它在另一台服务器上,我得到这个:
freemarker.core.ParseException: Syntax error in template
"template-name.ftl" in line 15, column 100: Lexical error: encountered
"\ufffd" (65533), after "". at
freemarker.core.TokenMgrError.toParseException(TokenMgrError.java:247)[445:org.freemarker.freemarker:2.3.23.stable]
我的freemarker版本是2.3.23.stable.
任何提示我应该做什么才能 运行 这个有问题的服务器上的模板?
N.B。我 运行 来自 Apache Karaf 的 freemarker 模板。
我猜你的模板是一些 non-UTF-8 字符集(可能是 ISO-8859-1),但是 FreeMarker 的 defaultEncoding
配置设置没有设置,所以它使用默认的操作系统。 OS 默认值是 non-UTF-8 字符集,它将起作用。但是在 OS 默认为 UTF-8 的情况下,代码 127 以上的字符将被视为无效的 UTF-8 字节序列,并且 Java 会将它们替换为 U+FFFD 字符。
更新:另一种获取 U+FFFD 字符的方法是读取具有 US-ASCII 字符集的 non-US-ASCII(例如 UTF-8、ISO-8859-1 等)文件,因为那里超过 127 的字符代码是非法的。
正在设置默认字符集:
- 在 java 中:
configuration.setDefaultEncoding("...")
,其中 configuration
是您已经在使用的 freemarker.template.Configuration
object
- 在
.properties
文件中(如果 FreeMarker 是从该文件配置的):defaultEncoding=...
- 每个模板:
<#ftl encoding="...">
header
我有以下 freemarker 文件:
<#ftl strip_whitespace="true">
...
<#assign wän = ...>
如果我在一台服务器上 运行 这样的 freemarker,它运行良好,如果我 运行 它在另一台服务器上,我得到这个:
freemarker.core.ParseException: Syntax error in template "template-name.ftl" in line 15, column 100: Lexical error: encountered "\ufffd" (65533), after "". at freemarker.core.TokenMgrError.toParseException(TokenMgrError.java:247)[445:org.freemarker.freemarker:2.3.23.stable]
我的freemarker版本是2.3.23.stable.
任何提示我应该做什么才能 运行 这个有问题的服务器上的模板?
N.B。我 运行 来自 Apache Karaf 的 freemarker 模板。
我猜你的模板是一些 non-UTF-8 字符集(可能是 ISO-8859-1),但是 FreeMarker 的 defaultEncoding
配置设置没有设置,所以它使用默认的操作系统。 OS 默认值是 non-UTF-8 字符集,它将起作用。但是在 OS 默认为 UTF-8 的情况下,代码 127 以上的字符将被视为无效的 UTF-8 字节序列,并且 Java 会将它们替换为 U+FFFD 字符。
更新:另一种获取 U+FFFD 字符的方法是读取具有 US-ASCII 字符集的 non-US-ASCII(例如 UTF-8、ISO-8859-1 等)文件,因为那里超过 127 的字符代码是非法的。
正在设置默认字符集:
- 在 java 中:
configuration.setDefaultEncoding("...")
,其中configuration
是您已经在使用的freemarker.template.Configuration
object - 在
.properties
文件中(如果 FreeMarker 是从该文件配置的):defaultEncoding=...
- 每个模板:
<#ftl encoding="...">
header