【问题标题】:Different grouping separator for same Locale between Java 8 and 11Java 8 和 11 之间相同语言环境的不同分组分隔符
【发布时间】:2021-07-25 12:59:12
【问题描述】:

我正在根据语言和地区设置区域设置,并希望使用此设置解析 BigDecimal 数字。但我面临的问题是两个 OpenJDK 的分组分隔符不同。

以下是我尝试使用 OpenJDK 8 和 OpenJDK 11 执行的示例代码。

Locale l = new Locale.Builder().setLanguage("de").setRegion("CH").build();
System.out.println("Locale set to " + Locale.getDefault(Locale.Category.FORMAT));
DecimalFormat nf = (DecimalFormat)NumberFormat.getInstance(Locale.getDefault(Locale.Category.FORMAT));
System.out.println("Grouping Separator: " + nf.getDecimalFormatSymbols().getGroupingSeparator());

输出

OpenJDK 8
---------
Locale set to de_CH
Grouping Separator: '


OpenJDK 11
----------
Locale set to de_CH
Grouping Separator: ’

我需要一个通用的解析方法,其中分组分隔符返回相同,以便设计我的单元测试并且无论使用 java 8 还是 11 运行它都可以通过。请协助。

【问题讨论】:

  • 为什么您希望不同版本之间发生变化?如果你想要一个常量分组分隔符,specify your own

标签: java java-8 locale java-11 openjdk-11


【解决方案1】:

这是一个正确且已定义的行为,在Java 11 release notes 中作为新功能实现并描述为引用JDK-8203868

基于 Unicode 联盟的 CLDR(通用区域设置数据注册表)的区域设置数据已针对 JDK 11 进行了更新。在补充平面中的本地化数字(例如,印度 Chakma 脚本中的那些)被替换为 ASCII 数字,直到 @987654323 @ 已解决。缅甸语区域的中短时模式尚未升级。当JDK-8209175 解决后,这些模式将被升级。

有关 CLDR 第 33 版的更多详细信息,请参阅http://cldr.unicode.org/index/downloads/cldr-33

基本上,从 JDK 11 开始,语言环境数据已更新为 Unicode CLDR v33

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多