Java8和11之间相同语言环境的不同分组分隔符
我正在根据语言和地区设置区域设置,并希望使用此设置解析 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 运行它都会通过。请协助。
回答
这是在引用JDK-8203868 的Java 11 发行说明中作为新功能实现和描述的正确且定义的行为:
基于 Unicode Consortium 的 CLDR(通用语言环境数据注册表)的语言环境数据已针对 JDK 11 进行了更新。在JDK-8204092解决之前,补充平面中的本地化数字(例如印度 Chakma 脚本中的数字)将替换为 ASCII 数字. 缅甸语言环境的中短时间模式尚未升级。当JDK-8209175得到解决,这些模式也将升级。
有关 CLDR 版本 33 的更多详细信息,请参阅http://cldr.unicode.org/index/downloads/cldr-33。
基本上,从JDK 11 开始,语言环境数据已更新为Unicode CLDR v33。