Различный разделитель групп для одной и той же локали между Java 8 и 11

Я устанавливаю Locale на основе языка и региона и хочу проанализировать число 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. Пожалуйста, помогите.


person Pratik Kumawat    schedule 03.05.2021    source источник
comment
Почему не вы ожидаете, что что-то изменится между версиями? Если вам нужен постоянный разделитель группировки, укажите свой собственный.   -  person Sweeper    schedule 03.05.2021


Ответы (1)


Это правильное и определенное поведение, реализованное и описанное как новая функция в примечания к выпуску Java 11, ссылающиеся на JDK-8203868:

Данные локали, основанные на CLDR (Common Locale Data Registry) Консорциума Unicode, были обновлены для JDK 11. Локализованные цифры, которые находятся в дополнительных плоскостях (например, в индийском сценарии чакма), заменяются цифрами ASCII до тех пор, пока JDK-8204092 разрешен. Шаблоны среднего и короткого времени для бирманской локали не были обновлены. Когда JDK-8209175 будет разрешено, эти шаблоны будут обновлены.

Дополнительные сведения о выпуске 33 CLDR см. на странице http://cldr.unicode.org/index/downloads/cldr-33.

По сути, данные локали были обновлены до Unicode CLDR v33, действующего с JDK 11.

person Nikolas Charalambidis    schedule 03.05.2021