Я разрабатываю код для представления символов валюты как части метки в моем приложении, и у меня есть справочный список символов валюты в шестнадцатеричном формате Unicode. В моем коде я форматирую валюту следующим образом:
(символ валюты) (десятичная строка) (описание валюты)
Этот подход отлично работает для большинства символов, однако я заметил, что некоторые символы автоматически сдвигаются вправо от десятичного значения, даже если они явно помещены влево. Используя отладчик, я вижу такое поведение даже на самом фундаментальном уровне в самих строках, так что это не случай каких-либо манипуляций на более высоких уровнях посредством рендеринга на уровне представления. Следующий код представляет простой случай, демонстрирующий проблему:
string rialSymbol = "\ufdfc";
string amount = "123.45";
string description = "Rials";
string plainConcat = rialSymbol + " " + amount + " " + description;
Debug.WriteLine(plainConcat);
Вывод отладки (который также соответствует тому, что видно в пользовательском интерфейсе приложения) выглядит следующим образом:
123,45 (символ риала) Риалы
(Примечание: символ находится справа от десятичной дроби, а не слева, как указано)
Я пробовал много подходов и разновидностей форматирования строк, форматирования культуры и т. Д., Но, похоже, ничего не решает эту проблему. Как я могу принудительно разместить символ Юникода, не позволяя фреймворку принимать решение о размещении символа относительно десятичного значения? Это работает с большинством других символов, почему Rial (и некоторые другие) вызывают такое фундаментальное поведение строки?