Freemarker编码 - 带有重音字符的问号

Voj*_*ěch 6 java freemarker

我试图用Freemarker打印重音字符,但在重音字符的位置,我只得到问号.我已经证实,以下声明成立:

 "UTF-8" == Environment.getCurrentEnvironment().getConfiguration().getDefaultEncoding()
Run Code Online (Sandbox Code Playgroud)

我可以很容易地看到,在将变量字符赋予模板之前,它们已正确保存在变量中.

我的freemarker上下文可以在这里找到:https://gist.github.com/1975239

例如,而不是:

 Jedine?ný živý koncert, kde nejen, že uslyšíte, ale i uvidíte splynutí metalové kapely s padesáti?lenným orchestrem v?etn?.
Run Code Online (Sandbox Code Playgroud)

我一直在:

 Jedine?ný ?ivý koncert, kde nejen, ?e usly?íte, ale i uvidíte splynutí metalové kapely s padesáti?lenným orchestrem v?etn?.
Run Code Online (Sandbox Code Playgroud)

谢谢.

Sta*_*ano 7

通过在FreeMarkerViewResolver上设置内容类型,我能够解决与非标准符号(如™)类似的问题:

<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
...
    <property name="contentType" value="text/html;charset=UTF-8"/>
...
</bean>
Run Code Online (Sandbox Code Playgroud)


And*_*din 7

对于DROPWIZARD用户:在构造函数中通过UTF-8 Charset计算出:

import io.dropwizard.views.View;

import java.nio.charset.Charset;

public class SomeView extends View {
    public SomeView() {
        super("/views/some.ftl", Charset.forName("UTF-8"));
    }
}
Run Code Online (Sandbox Code Playgroud)


dde*_*any 2

FreeMarker 始终将文本视为 UNICODE,因此它不会生成问号。由于重音字母不是来自模板(如果我理解得很好),因此一定是您的输出编码不正确。另请参阅: http: //freemarker.org/docs/app_faq.html#faq_questionmark

顺便说一句,getDefaultEncoding()在这方面没有任何作用。这会影响加载模板时使用的解码,但是您说重音字符不是来自模板文件,我也不认为您可以?从解码中获得 -s (除非,对于无效的 UTF-8 字节序列)。至于输出的编码,FreeMarker 仅使用 a Writer(而不是OutputStream),因此它不会影响这一点。