Размещение символа валюты в строках .NET

Я разрабатываю код для представления символов валюты как части метки в моем приложении, и у меня есть справочный список символов валют в шестнадцатеричном формате Unicode. В моем коде я форматирую валюту следующим образом:

(символ валюты) (десятичная строка) (описание валюты)

Этот подход отлично работает для большинства символов, однако я заметил, что некоторые символы автоматически сдвигаются вправо от десятичного значения, даже если они явно помещены налево. Используя отладчик, я вижу такое поведение даже на самом фундаментальном уровне в самих строках, так что это не случай каких-либо манипуляций на более высоких уровнях с помощью рендеринга на уровне представления. Следующий код представляет простой случай, демонстрирующий проблему:

string rialSymbol = "\ufdfc";
string amount = "123.45";
string description = "Rials";
string plainConcat = rialSymbol + " " + amount + " " + description;
Debug.WriteLine(plainConcat);

Вывод отладки (который также соответствует тому, что видно в пользовательском интерфейсе приложения) выглядит следующим образом:

123,45 (символ риала) Риалы

(Примечание: символ предназначен для справа от десятичной дроби, а не слева, как указано)

Я пробовал много подходов и разновидностей форматирования строк, форматирования языка и т. д., но, похоже, ничего не решает эту проблему. Как я могу принудительно разместить символ Юникода, не позволяя фреймворку принимать решение о размещении символа относительно десятичного значения? Это работает с большинством других символов, почему Rial (и некоторые другие) вызывают такое основное поведение строки?

5
задан DMG 24 November 2010 в 22:35
поделиться