Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 地区货币符号_Java_Android_Localization_Internationalization_Currency - Fatal编程技术网

Java 地区货币符号

Java 地区货币符号,java,android,localization,internationalization,currency,Java,Android,Localization,Internationalization,Currency,我在获取系统的默认货币符号时遇到一些问题。 我通过以下方式获得货币符号: Currency currency = Currency.getInstance(Locale.getDefault()); Log.v("TAG",currency.getSymbol()); 当系统语言为英语(美国)时,将显示右侧符号($)。 但是当我选择语言葡萄牙语(葡萄牙)时,它返回这个符号· 是什么导致了这种情况?一些想法 可能是因为您得到了正确的(欧元)符号,但您的字体/日志中没有该符号,而且看起来只是该符号

我在获取系统的默认货币符号时遇到一些问题。 我通过以下方式获得货币符号:

Currency currency = Currency.getInstance(Locale.getDefault());
Log.v("TAG",currency.getSymbol());
当系统语言为
英语(美国)
时,将显示右侧符号(
$
)。 但是当我选择语言
葡萄牙语(葡萄牙)
时,它返回这个符号
·

是什么导致了这种情况?

一些想法

  • 可能是因为您得到了正确的(欧元)符号,但您的字体/日志中没有该符号,而且看起来只是该符号

  • Locale是一个非常活泼的类,它的构造函数没有错误检查。您可以很容易地看到标准中不支持或不存在的区域设置(例如“de_US”代表“美国所说的德语”)

  • 请注意,对于此类中预定义为常量的任何区域设置,区域设置数据都不一定可用,但en_US除外,en_US是唯一一个始终可用的区域设置Java保证,并且在不同的Android版本中有所不同,还可能受到操作员或自定义版本的限制

  • 关于您提出的选项,如果您在API8及以上版本中实施了这些选项,那么葡萄牙仅作为一个领土(而不是其组合)存在

  • 因此,如果仅从国家代码创建一个部分区域设置实例,然后获取葡萄牙的货币符号,可能会更好。您将无法遵守预定义的,因为它仅支持不同的区域设置(这是一个简短的列表),但它应该可以工作,因为此区域设置包含您在系统中查找的数据

  • 我还将尝试查看currency.toString()是否返回EUR(货币的ISO 4217代码,通常是三个字母的首字母缩写)


  • 这似乎是一个已知的问题(。 我通过这种方式找到了一个可能的解决方案:

    Currency currency = Currency.getInstance(Locale.getDefault());
    Log.v("TAG",currency.getSymbol());
    
    因为问题出在符号上,而不是货币代码上,所以我解决了这个问题,创建了一个静态的
    Map
    ,其中键是CurrencyCode,值是符号

    创建带有CurrencyCode和符号的地图后,只需执行以下操作:

    for (Locale ll: Locale.getAvailableLocales()){
        try {
           Currency a = Currency.getInstance(ll);
           Log.v("MyCurrency",a.getCurrencyCode()+"#"+a.getSymbol());
        }catch (Exception e){
           // when the locale is not supported
      }
    }
    
    Currency currency = Currency.getInstance(Locale.getDefault());
    String curSymbol = MYCURRENCIES.get(currency.getCurrencyCode());
    
    这将根据设备语言将int/double格式化为货币

        String currency = cur.replaceAll("[0-9.,]","");
    

    这就是如何通过替换所有数字、点和逗号来获得货币符号的方法

    也许您使用的是UTF-8而不是UTF-16?我不知道这是怎么回事,但这是一个想法。我认为这将是解决货币问题的一个好办法。getInstance(新语言环境(“您的语言”,countryCode)).getSymbol();您可能会从中得到问题的答案,这很酷,谢谢。ps:对于其他所有人:不使用Log.v,只使用MyCurrencyCode.put(a.getCurrencyCode(),a.getSymbol());
        String currency = cur.replaceAll("[0-9.,]","");