2016-06-21 200 views
0

我最近在java 1.7中看到,如果我在语言环境上循环,并获得相同的ISO3Country代码,那么对于语言环境“CS”,它给我错误“无法找到3个字母的国家代码CS”。它预期的行为? 我也测试了在Java 1.6中,但那里我没有得到这个错误。区域设置和ISO3CountryCodes

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

回答

0

简短的回答是:这是一个不再存在国家(塞尔维亚和黑山)的国家代码,所以行为可能确实是不确定的。

ISO-3166分为三部分。第一部分ISO-3166-1对这些国家代码进行了定义,然后又有几个部分。这里最相关的是ISO-3166-1 alpha-2ISO-3166-1 alpha-3,它们分别定义了2个和3个字母的国家代码。

根据alpha-2表格,“CS”是塞尔维亚和黑山这个不再存在的国家的国家代码。为了向后兼容,它仍然在alpha-2中有一个条目,标记为“保留用于删除”。为了向后兼容,它可能还在Java中。

alpha-3中的等效条目是“SCG”,并且也被标记为保留。我希望这个代码能够返回给你,但是可以理解它为什么不可以。 (或者,ISO-3166-3为不再存在的国家定义国家代码;它们是四个字母长,也许“CSXX”是应该在这里返回的......)