Ich entwickle Code, um Währungssymbole als Teil eines Labels in meiner Anwendung darzustellen, und ich habe eine Referenzliste mit Währungssymbolen im Unicode-Hexadezimalformat. In meinem Code bin Formatierung ich die Währung wie folgt:Platzierung von Währungssymbolen in .NET-Zeichenfolgen
(Währungssymbol) (Dezimalstring) (Währung Beschreibung)
Dieser Ansatz funktioniert für die meisten Symbole in Ordnung, aber merke ich, dass einige der Symbole wird automatisch nach rechts vom Dezimalwert verschoben, auch wenn explizit nach links platziert. Wenn ich den Debugger benutze, sehe ich dieses Verhalten sogar auf der grundlegendsten Ebene in den Strings selbst, so dass hier keine Manipulation auf höheren Ebenen durch das Rendering in der Präsentationsebene stattfindet. Der folgende Code stellt den einfachen Fall zeigt das Problem:
string rialSymbol = "\ufdfc";
string amount = "123.45";
string description = "Rials";
string plainConcat = rialSymbol + " " + amount + " " + description;
Debug.WriteLine(plainConcat);
Die Debug-Ausgabe (die auch dem entspricht, was in der Anwendung UI gesehen hat) ist wie folgt:
123,45 (rial Symbol) Rials
(Hinweis: Das Symbol ist rechts neben der Dezimalzahl nicht links, wie angegeben)
Ich habe viele Ansätze und Varianten der String-Formatierung, Kulturformatierung usw. versucht, aber nichts scheint dieses Problem anzugehen. Wie kann ich die Platzierung des Unicode-Zeichens erzwingen, ohne dass das Framework die Platzierung des Symbols relativ zum Dezimalwert entscheidet? Dies funktioniert mit den meisten anderen Zeichen, warum verursacht der Rial (und einige andere) diese Art von grundlegendem String-Verhalten?
vielen Dank! Genau das, was ich brauchte. – DMG
+1 Wow, woher kam das ?! Erstaunlich ... – Aliostad
Ich fand die Details des BiDi-Algorithmus hier: http://www.unicode.org/reports/tr9/ – DMG