Отсутствуют символы валюты на сервере Linux

У меня есть java-приложение, которое должно отображать символы валюты. Я работаю на сервере Linux (Ubuntu).

На сервере Linux LANG=en_GB.UTF-8

Следующий код проверяет проблему:

import java.util.Currency;
import java.util.Locale;
import java.text.NumberFormat;

public class SymbolTest
{
  public static void main(String[] args)
  {
    System.out.println("Hardcoded Unicode Currency Symbol for GBP [\u00A3] ");
    System.out.println("Currency Symbol for GBP with Locale [" + Currency.getInstance(Locale.UK).getSymbol() + "]");
    System.out.println("Currency Symbol for US with Locale [" + Currency.getInstance(Locale.US).getSymbol() + "]");
    System.out.println("Currency Symbol for FRANCE with Locale [" + Currency.getInstance(Locale.FRANCE).getSymbol() + "]");
  }
}

дает вывод:

Жестко закодированный символ валюты Unicode для GBP £

Обозначение валюты для GBP с языковым стандартом [££]

Символ валюты для США с языковым стандартом [USD]

Символ валюты для ФРАНЦИИ с локалью [â¬]

Я подозреваю, что это проблема Locale или Lang на сервере Ubuntu. Что мне нужно установить/настроить на Linux-сервере, чтобы отображались символы валюты?


person Paul    schedule 11.02.2011    source источник
comment
Наличие шрифта, установленного в системе, действительно важно только для рендеринга шрифта. Вероятно, ваш сервер не отображает шрифты. (По крайней мере, я надеюсь, вы не используете веб-браузер на своем сервере, память слишком ценна, чтобы тратить ее на графический интерфейс и браузер. :) Показывает ли ваша рабочая станция правильный вывод при использовании http://localhost/..., но не получается при использовании http://server/...? Или неправильный вывод отображается в другом веб-браузере?   -  person sarnold    schedule 11.02.2011
comment
Да, это слишком туманно, чтобы дать осмысленный ответ.   -  person Pekka    schedule 11.02.2011


Ответы (2)


Ваша программа правильно пытается вывести UTF-8, но ваш терминал, по-видимому, не знает, что он должен быть в режиме UTF-8. Так что тут виноват ваш терминал. Какой терминал вы используете?

Попробуйте перенаправить вывод программы в файл и откройте этот файл в редакторе с поддержкой UTF-8, чтобы убедиться, что вывод правильный.

person Christoffer Hammarström    schedule 01.03.2011
comment
Я проверю это и вернусь к вам. Одна мысль - не будет ли вывод символа валюты для локали США указывать, что проблема не в терминале - Символ валюты для США с локалью [USD]? В моем реальном веб-приложении все символы отображаются как их аббревиатура (например, £ как GBP). - person Paul; 01.03.2011
comment
Это другая проблема. Согласно javadoc, .getSymbol() вернет код валюты в соответствии с локалью по умолчанию, в вашем случае en_GB, что мне кажется ужасно запутанным дизайном API. Если подумать, хотя это имеет смысл, это означает, что символ доллара США USD в локали en_GB Попробуйте .getSymbol(Locale.US), чтобы получить символ, используемый в США. - person Christoffer Hammarström; 01.03.2011
comment
правильно по обоим пунктам. Спасибо! Пришлось использовать Currency.getInstance(Locale.US).getSymbol(Locale.US), чтобы получить символ $. Currency.getInstance(Locale.US) задает тип валюты как доллары США, а getSymbol(Locale.US) задает Locale, определяющий способ представления валюты, getSymbol(Locale.US) -> $ и getSymbol(Locale.UK) -> ДОЛЛАР США - person Paul; 01.03.2011

Я предполагаю, что проблема, вероятно, связана с тем, как вы на самом деле форматируете число или локаль, а не шрифт. Ознакомьтесь с справочником по Grails по форматированию чисел как валюты и документ API java.util.Currency для получения дополнительной информации. Быстрый способ исключить проблему, связанную со шрифтом, — просто ввести (при необходимости скопировать и вставить) нужный символ в GSP и убедиться, что вы можете просмотреть его в своем браузере:

  • $
person proflux    schedule 11.02.2011
comment
Он не форматирует числа, и я не уверен, что вы имеете в виду под форматированием локали или форматированием шрифта? - person Christoffer Hammarström; 01.03.2011
comment
Возможно, вы могли бы изучить историю редактирования сообщения и увидеть информацию, которая была доступна, когда я ответил, прежде чем понизить мой ответ. - person proflux; 01.03.2011
comment
Достаточно справедливо, но это не позволит мне изменить свой голос, пока ваш ответ не будет отредактирован. И я до сих пор не понимаю, что вы подразумеваете под форматированием локали или шрифта. - person Christoffer Hammarström; 01.03.2011