2014-04-12 2 views
0

У меня есть JSON для валют:Показать символы Юникода - Android

[ 
    { 
    "acronym": "EUR", 
    "currency": "Euros", 
    "favorite": "true", 
    "placeholder": "\\u20ac00.00 EUR", 
    "symbol": "\\u20ac" 
    } 
] 

Я положил это в папке активов и синтаксического анализа следующим образом:

InputStream stream = context.getAssets().open("currencies.json"); 
int size = stream.available(); 
byte[] buffer = new byte[size]; 
stream.read(buffer); 
stream.close(); 
str = new String(buffer, "UTF-8"); 

который я затем преобразовать в мой объект Pojo с GSON

Type objectType = new TypeToken<ArrayList<Currency>>(){}.getType(); 
ArrayList<Currency> currencies = gson.fromJson(json, objectType); 
return currencies; 

который прекрасно работает (мои свойства pojo называются такими же, как в json).

ОДНАКО

При попытке отобразить символ не отображать его, как следует, например я получаю "\ u20ac" вместо "€"

txtAmount.setText(currency.getSymbol()); 

I «уже пробовали в следующем журнале

Log.d(currency.getSymbol() + "\u20ac"); 

что дает мне:

\u20ac€ 

Я не понимаю, почему он не будет отображать символы правильно ..

+4

Ваш JSON убегает от обратной косой черты. Попробуйте '' \ u20ac "' вместо '' \\ u20ac "' –

+0

(Вы также читаете JSON ужасно. Вы должны почти * никогда не использовать 'доступный()'. Используйте 'InputStreamReader' и в идеале используйте вспомогательную библиотеку, которая может просто прочитать содержимое любого «Читателя» в строке. Например, Guava.) –

+0

@Jon Skeet Спасибо, что это было, не могли бы вы разместить короткий ответ, чтобы я мог его принять и дать вы кредит. Что касается InputStreamReader, я не смог найти лучший способ прочитать файл из активов, я посмотрю на guava. Благодаря! –

ответ

1

Ваш JSON избежал обратной косой черты, что означает, что это представление JSON из «обратной косой ˙U 20AC».

Все, что вам нужно сделать, это не обратный слеш, так что \u20ac является JSON-экранированием символа евро:

"symbol": "\u20ac" 

Я также предлагаю использовать Guava, чтобы загрузить строку, с запросом на использование ресурсов:

String json; 
try (Reader reader = 
     new InputStreamReader(context.getAssets().open("currencies.json"), 
           Charsets.UTF_8)) { 
    json = CharStreams.toString(reader); 
} 
Смежные вопросы