ISO_3166-1国家/地区名称和java.util.Locale

时间:2018-08-02 11:38:16

标签: java iso

我正在尝试将ISO分配的国家/地区名称转换为其ISO_3166-1 alpha 3(3个字母)代码。我已经在这里看到了实现此效果的代码段。

但是,看来getDisplayCountry方法返回的字符串与the ISO website上显示的分配的名称有所不同。例如,对于Alpha 3代码“ RUS”,getDisplayCountry"Russia",而ISO分配的英文名称(又名英文简称)如下所示。

iso website screenshot - RUS

如何解决此问题?尤其是如果我不想维护单独的查找文件-破坏了使用内置Java类的整个目的。

1 个答案:

答案 0 :(得分:1)

Locale.getDisplayCountry()以适合于在其区域设置中向用户显示的形式返回国家/地区名称:

  

返回适合显示给用户的语言环境所在国家/地区的名称。如果可能,返回的名称将被本地化为默认的DISPLAY语言环境。例如,如果语言环境为fr_FR,默认的DISPLAY语言环境为en_US,则getDisplayCountry()将返回“ France”;如果语言环境为en_US,而默认的DISPLAY语言环境为fr_FR,则getDisplayCountry()将返回“ Etats-Unis”。如果返回的名称无法针对默认的DISPLAY区域设置进行本地化(例如,对于克罗地亚,我们没有日语名称),则此函数将退回到英语名称上,并使用ISO代码作为最后的值。如果语言环境未指定国家/地区,则此函数返回空字符串。

ISO网站仅列出了英语和法语版本的国家/地区。看起来Java可能使用了不同的(或更改的)国家名称来源,因此,即使您注意到en_US语言环境,也无法保证这些名称匹配。

如果要匹配的只是显示名称(并且显示名称在整个数据集中已标准化),则可以在列表之间创建映射。本质上,您将下载ISO列表,并使用2或3位数字的国家/地区代码创建一个包含ISO显示名称到Java显示名称的查找表。从那里您可以映射数据。