Locale и ISO3CountryCodes

Недавно я видел в Java 1.7, что если я зациклюсь на Locales и получу код ISO3Country для того же самого, то для Locale "CS" это даст мне ошибку "не могу найти трехбуквенный код страны CS". Это ожидаемое поведение? Я также тестировал в Java 1.6, но там я не получаю эту ошибку.

Locales[] locales =        GregorianCalender.getAvailableLocales();
For(Locale l: locales){
     System.out.println(l.getISO3CountryCode());
  }  

1 ответ

Краткий ответ: это код страны для страны, которая больше не существует (Сербия и Черногория), поэтому поведение может действительно быть неопределенным.

ISO-3166 состоит из трех частей. Первая часть, ISO-3166-1, определяет эти коды стран и, в свою очередь, состоит из нескольких частей. Наиболее актуальными здесь являются ISO-3166-1 alpha-2 и ISO-3166-1 alpha-3, которые определяют 2- и 3-буквенные коды стран соответственно.

Согласно таблице альфа-2, "CS" - это код страны для Сербии и Черногории, страны, которая больше не существует. У него все еще есть запись в альфа-2, помеченная как "зарезервированная для удаления", для целей обратной совместимости. Вероятно, это все еще в Java для обратной совместимости.

Эквивалентная запись в альфа-3 - "SCG" и также помечена как зарезервированная. Я ожидаю, что этот код будет вам возвращен, но я могу понять, почему это не так. (В качестве альтернативы ISO-3166-3 определяет коды стран для стран, которые больше не существуют; они состоят из четырех букв, и, возможно, "CSXX" - это то, что должно быть возвращено здесь...)

Другие вопросы по тегам