Freemarker模板货币符号编码问题

问题描述 投票:0回答:1

在java中使用freemarker模板产生了一个错误的货币符号。期待 $ 然而得到 ¤

我试过将 encodingoutputEncoding 在freemarkerConfig上没有任何进展

    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"> 到我的模板文件,没有任何区别。

编辑

这是我使用货币函数的方法。 ${amountValue?string.currency}

java encoding character-encoding freemarker
1个回答
1
投票

这不是一个编码问题。∮字符被称为货币符号,如果Java数字格式不知道实际的货币,它就会打印出来。它不知道的原因是你将FreeMarker的 locale 设置为 locale.getLanguage() (如 "en"),而不是 locale.toString() (比如 "en_US",其中也包含国家),语言不足以决定货币,是国家决定的。

另外,如果可以的话,避免使用 setSetting,并调用强类型的方法,如 freemarkerConfig.setLocale(locale), freemarkerConfig.setTimeZone(timeZone)、等。

© www.soinside.com 2019 - 2024. All rights reserved.