[英]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.