以下代码片段在 Java 6 中的行为与 Java 7 不同:
final Locale locale = new Locale("nb", "NO");
System.out.println(locale.getDisplayLanguage()); // Norwegian Bokmål
final DecimalFormatSymbols dfs = new DecimalFormatSymbols(locale);
System.out.println(dfs.getDecimalSeparator()); // Java 6: .
// Java 7: ,
为什么?此更改是否记录在某处?
Java 6 在 Locale
方面存在许多问题,这很可能是其中之一。当然,挪威区域设置的正确分隔符是 ,
.
Oracle 错误数据库确实显示了相当多与 NO 语言环境相关的错误......
JDK 7 和 JRE 7 支持的语言环境,选择挪威语的正确/支持的语法是"no"/"NO"。
new Locale("no", "NO")
在 Java 6 和 Java 7 下都给出了正确的结果。
CLDR
在 Java 9 及更高版本中,基于 OpenJDK 的 Java 实现默认转换为使用从 Unicode 联盟的通用语言环境数据存储库 (CLDR)(参见维基百科)获取的区域设置数据。
此开关提供了比以前在 Java 中看到的更丰富的区域设置数据。此切换可能意味着您会看到某些区域设置的某些方面的行为发生了变化。
请参阅:JEP 252:默认使用 CLDR 区域设置数据
Java 中的逗号 10
当我运行此代码时:
System.out.println( "java.version: " + System.getProperty( "java.version" ) );
final Locale locale = new Locale( "nb" , "NO" );
System.out.println( locale.getDisplayLanguage() ); // Norwegian Bokmål
final DecimalFormatSymbols dfs = new DecimalFormatSymbols( locale );
System.out.println( dfs.getDecimalSeparator() );
我得到逗号字符。
Java版本: 10.0.2
书面挪威语
,