我试图用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)
谢谢.
通过在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)
对于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)
FreeMarker 始终将文本视为 UNICODE,因此它不会生成问号。由于重音字母不是来自模板(如果我理解得很好),因此一定是您的输出编码不正确。另请参阅: http: //freemarker.org/docs/app_faq.html#faq_questionmark
顺便说一句,getDefaultEncoding()在这方面没有任何作用。这会影响加载模板时使用的解码,但是您说重音字符不是来自模板文件,我也不认为您可以?从解码中获得 -s (除非,对于无效的 UTF-8 字节序列)。至于输出的编码,FreeMarker 仅使用 a Writer(而不是OutputStream),因此它不会影响这一点。
| 归档时间: |
|
| 查看次数: |
6147 次 |
| 最近记录: |