Freemarker模板货币符号编码问题

Freemarker template currency symbol encoding issue

将 freemarker 模板与 java 一起使用会生成错误的货币符号。 期待 $ 但得到 ¤

我试过在 freemarkerConfig 上设置 encodingoutputEncoding 但没有成功

    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 数字格式会打印它。它不知道的原因是您将 FreeMarker locale 设置设置为 locale.getLanguage()(如 "en"),而不是 locale.toString()(如 "en_US",其中还包含一个国家),语言不足以决定货币,这是决定货币的国家。

此外,如果可以,请避免 setSetting,并调用强类型方法,如 freemarkerConfig.setLocale(locale)freemarkerConfig.setTimeZone(timeZone)