2016-06-21 7 views
0

Ich habe kürzlich in Java 1.7 gesehen, dass, wenn ich auf Locales loop und den ISO3Country-Code für die gleiche dann für Locale "CS" bekomme ich Fehler "konnte nicht finden 3-Buchstaben-Ländercode CS". Ist es erwartetes Verhalten? Ich habe auch in Java 1.6 getestet, aber ich bekomme diesen Fehler nicht.Locale und ISO3CountryCodes

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

Antwort

0

Die kurze Antwort lautet: Dies ist ein Ländercode für ein Land, das nicht mehr existiert (Serbien und Montenegro), so dass das Verhalten in der Tat unbestimmt sein kann.

ISO-3166 ist in drei Teile unterteilt. Der erste Teil, ISO-3166-1, definiert diese Ländercodes und hat wiederum mehrere Teile. Die relevantesten sind hier ISO-3166-1 alpha-2 und ISO-3166-1 alpha-3, welche die Ländercodes mit 2 bzw. 3 Buchstaben definieren.

Laut der Alpha-2-Tabelle ist "CS" die Landesvorwahl für Serbien und Montenegro, ein Land, das nicht mehr existiert. Es hat immer noch einen Eintrag in Alpha-2, markiert als "für die Löschung reserviert", aus Gründen der Abwärtskompatibilität. Es ist wahrscheinlich auch noch in Java für Rückwärtskompatibilität.

Der äquivalente Eintrag in Alpha-3 ist "SCG" und wird ebenfalls als reserviert markiert. Ich würde erwarten, dass dieser Code an Sie zurückgegeben wird, kann aber verstehen, warum es nicht sein könnte. (Alternativ, ISO-3166-3 definiert Ländercodes für Länder, die nicht mehr existieren; sie sind vier Buchstaben lang und vielleicht "CSXX" ist, was hier zurückgegeben werden sollte ...)