2016-06-21 204 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」是應該在這裏返回的......)