[英]Freemarker template currency symbol encoding issue
使用带有 java 的 freemarker 模板会产生不正确的货币符号。 期待$
但得到¤
我试过在 freemarkerConfig 上设置encoding
和outputEncoding
没有运气
public String processTemplate(String freemarkerTemplate, Object model, Locale locale) throws IOException, TemplateException {
try {
this.freemarkerConfig.setSetting("locale", locale.getLanguage());
this.freemarkerConfig.setSetting("time_zone", "EST");
} catch (TemplateException e) {
log.warn("Failed to set locale {} for freemarker template.", locale.getLanguage(), e);
}
//freemarkerConfig.setEncoding(locale, "UTF-8");
//freemarkerConfig.setOutputEncoding("UTF-8");
Template template = freemarkerConfig.getTemplate(freemarkerTemplate);
//template.setOutputEncoding("UTF-8");
return FreeMarkerTemplateUtils.processTemplateIntoString(template, model);
}
还尝试将<#ftl encoding="utf-8">
添加到我的模板文件中,没有任何区别。
编辑
这就是我使用货币 function: ${amountValue?string.currency}
的方式
这不是编码问题。 ¤ 字符称为货币符号,如果不知道实际货币,则 Java 数字格式将其打印出来。 它不知道的原因是您将 FreeMarker locale
设置设置为locale.getLanguage()
(如“en”),而不是locale.toString()
(如“en_US”,其中也包含一个国家/地区),并且语言不足以决定货币,是国家决定的。
此外,如果可以,请避免setSetting
并调用强类型方法,如freemarkerConfig.setLocale(locale)
、 freemarkerConfig.setTimeZone(timeZone)
等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.