2012-10-02 135 views
9

我在獲取系統的默認貨幣符號時遇到了一些問題。 我收到的貨幣符號是這樣的:區域設置貨幣符號

Currency currency = Currency.getInstance(Locale.getDefault()); 
Log.v("TAG",currency.getSymbol()); 

當系統語言爲English (United States)正確的符號顯示出來($)。 但是,當我選擇語言Portuguese (Portugal)它返回這個符號¤

什麼可能導致這種情況?

+0

UTF-8而不是UTF-16?我不明白這是怎麼發生的,但這是一個想法。 – AedonEtLIRA

+0

我認爲這將是一個很好的解決你的答案 Currency.getInstance(新的區域(「您的語言」,COUNTRYCODE))getSymbol()。 –

+0

你可以從這個[鏈接]得到的回答你的問題(https://stackoverflow.com/questions/16832655/getting-currency-code-if-we-have-only-country-code-in-database/16833419# 16833419) –

回答

2

有些想法;

  1. 難道是你得到正確的符號(歐元),但你的字體/日誌沒有它,它只看起來像那個符號?

  2. 語言環境是一個非常活潑的類,它的構造函數沒有錯誤檢查。您可以輕鬆地看到標準中不支持或不存在的語言環境(例如「de_US」用於「在美國使用的德語」)。

  3. 請注意,區域設置數據不一定適用於預定義爲此類中的常量的任何語言環境,但en_US是唯一的區域設置Java保證始終可用,並且它在不同的Android版本中有所不同,也可能受到運營商或定製構建的限制。 pt_PT was added in 2.3

  4. 關於您提供的選項,如果您檢出Unicode's standards,因爲它們已在API8及更高版本中實施,則葡萄牙僅作爲地區(而不是組合)存在。

  5. 因此,如果您僅從國家/地區代碼創建部分區域設置實例,然後獲取葡萄牙的貨幣符號,則可能會更好。您將無法遵守預定義的statics of Locale's class,因爲它相當狹窄地支持不同的區域設置(這是一個簡短列表),但它應該可以工作,因爲此區域設置具有您在系統中查找的數據。

  6. 我也會試着看看currency.toString()是否返回EUR(貨幣的ISO 4217代碼,通常是三個字母的首字母縮寫詞)。

13

這似乎是一個已知的問題(http://code.google.com/p/android/issues/detail?id=38622 我來到了一個可能的解決方案是這樣的:。

既然問題是在符號,而不是貨幣代碼,我解決了這個問題創造靜態Map其中關鍵是貨幣代碼和值是符號

public static final Map<String, String> MYCURRENCIES = new HashMap<String, String>(){ 
     { 
      put("EUR","€"); 
      put("USD","$"); 
      (..) 
     } 
}; 

爲了讓所有(或幾乎)在語言環境的信息可用的貨幣代碼,你可以做這樣的事情:

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()); 
+1

這很酷,謝謝。 PS:其他所有人:不是Log.v簡單地 MYCURRENCIES.put(a.getCurrencyCode(),a.getSymbol()); –

2
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance(); 
    String cur = currencyFormatter.format(yourValue); 

這將對您的INT /雙基於設備語言

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

一種貨幣,這是怎麼也許你正在使用得到的只是貨幣符號,更換所有數字,點和逗號

相關問題