如何使用非ISO 3166国家/地区创建货币实例,例如en_UK?

cod*_*ser 4 java android locale

在我的应用程序中,我使用了用户的默认语言环境Locale.getDefault(),然后将其传递给Currency.getInstance(Locale).它主要起作用,但我已经开始从用户那里获得报告IllegalArgumentException,在堆栈跟踪中显示以下内容:

引起:java.lang.IllegalArgumentException:不支持的ISO 3166国家:org中的java.util.Currency.getInstance(Currency.java:81)中的en_UK.

我希望Android只返回有效的语言环境,但显然并非如此.

如何处理此类情况以确保我只获得有效的ISO 3166区域设置?简单的方法是处理这种特殊情况,但如果有的话,我宁愿使用通用解决方案.

有人有这方面的经验吗?谢谢.

Fra*_*ank 9

英国的ISO 3166双字母缩写不是UK,正确的ID是GB. UK是出于兼容性原因(过去犯了一个错误).

我确实寻找其他的exeptions但没找到任何,所以现在我只处理特殊情况.

Locale loc = new Locale("en","UK"); // test code

if(loc.getCountry().equals("UK")){
    loc = new Locale(loc.getLanguage(), "GB");
    }
Currency cur = Currency.getInstance(loc);
Run Code Online (Sandbox Code Playgroud)