Zajmuję się tworzeniem kodu służącego do prezentacji symboli walut w ramach etykiety na mojej aplikacji i mam listę referencyjną symboli walut w formacie szesnastkowym Unicode. W moim kodu mam formatowania walutę następująco:Umieszczanie symboli walutowych w ciągach .NET
(symbol waluty) (ciąg znaków po przecinku) (opis walucie)
Podejście to działa dobrze dla większości symboli, jednak widzę, że niektóre symbole są automatycznie przesuwane na prawo od wartości dziesiętnej, nawet jeśli jest wyraźnie umieszczone po lewej stronie. Używając debuggera, widzę to zachowanie nawet na najbardziej podstawowym poziomie w samych łańcuchach, więc nie jest to przypadek jakiejkolwiek manipulacji na wyższych poziomach przez renderowanie w warstwie prezentacji. Poniższy kod prezentuje prosty przypadek wykazujący problem:
string rialSymbol = "\ufdfc";
string amount = "123.45";
string description = "Rials";
string plainConcat = rialSymbol + " " + amount + " " + description;
Debug.WriteLine(plainConcat);
wyjścia debugowania (co odpowiada również to, co widać w interfejsie aplikacji) jest następujący:
123,45 (rial symbol) riali
(Uwaga: symbol jest po prawej stronie ułamka dziesiętnego, a nie po lewej, jak podano)
Próbowałem wielu podejść i odmian formatowania ciągów, formatowania kultur itp., Ale nic nie wydaje się zajmować tym problemem. Jak mogę wymusić umieszczenie znaku Unicode bez decydowania o rozmieszczeniu symbolu względem wartości dziesiętnej? Działa to z większością innych znaków, dlaczego Rial (i kilka innych) powoduje ten typ podstawowego zachowania łańcuchowego?
Dziękuję bardzo! Dokładnie to, czego potrzebowałem. – DMG
+1 Wow, skąd to się wzięło ?! Niesamowite ... – Aliostad
Znalazłem szczegóły algorytmu BiDi tutaj: http://www.unicode.org/reports/tr9/ – DMG