【问题标题】:Weird character when trying to output Double amount in Freemarker尝试在 Freemarker 中输出 Double 金额时出现奇怪的字符
【发布时间】:2020-06-23 04:14:30
【问题描述】:

美好的一天

当尝试使用 Freemarker 显示双倍金额时,会在金额中插入这个奇怪的字符:Â

Example of original amount: 1257.12
Freemarker output: 1Â 257,12 

为什么会这样?

编辑:

通过在 ftlx 文件的标题部分将字符集设置为 UTF8 来解决此问题。

【问题讨论】:

  • 您可能需要提供更多代码,例如模板以及如何将参数提供给它。我的猜测是,模板试图呈现分组分隔符是一个编码问题。
  • 可能是某种货币符号字体/编码无法显示
  • 我怀疑它是某种文化中的“千位分隔符”,再加上编码不匹配。您的系统文化是什么?
  • @JonSkeet 嗨 Jon,它是南非,它使用空格,例如:1 234 567
  • 啊,这就解释了。它不是一个普通的空间,它是一个不间断的空间。现在写一个答案。

标签: java freemarker


【解决方案1】:

您看到的是 U+00A0 的编码不匹配表示,它是南非数字组分隔符 - 一个不间断的空格。

U+00A0 的 UTF-8 表示是两个字节:0xC2 0xA0。当这些字节被解码为 ISO-8859-1 时,您最终会得到 U+00C2 U+00A0 - 即 "Â" 后跟不间断空格。

因此,基本上,如果您能说服所有相关人员使用相同的编码 - 最好是 UTF-8 - 您应该没问题。

【讨论】:

  • 另外,Java 的默认数字格式在某个语言环境中的默认数字格式不是用户想要的默认数字格式的情况也经常发生。 (更不用说,理论上可以针对新的 Java 版本进行更改。)在这种情况下,可以使用 java.text.spi.NumberFormatProvider 来覆盖它。或者,如果默认数字格式只是模板中的问题,可以使用FreeMarker的number_format配置设置。
  • 感谢 @ddekany 考虑使用您的建议为项目全局设置此设置。
猜你喜欢
  • 1970-01-01
  • 2021-07-13
  • 2016-09-06
  • 2016-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
相关资源
最近更新 更多