Locale和ISO3CountryCodes

时间:2016-06-21 15:07:21

标签: java locale gregorian-calendar iso-3166

我最近在java 1.7中看到,如果我在Locales上循环并获得相同的ISO3Country代码,那么对于Locale" CS"它给了我错误"找不到3个字母的国家代码CS"。这是预期的行为吗? 我也在java 1.6中测试过但是我没有收到这个错误。

public static IEnumerable<Control> 
                           GetDeepControlsByType<T>(this Control control)
{
   return control.Controls.OfType<T>()
          .Union(control.Controls.SelectMany(c => c.GetDeepControlsByType<T>()));        
}

1 个答案:

答案 0 :(得分: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”应该在此处返回...)