C# WPF - Unicode als Binding

Departet

Lieutenant
Registriert
Sep. 2008
Beiträge
765
Moin,

ich brauche unbedingt Hilfe. Bin langsam am Ende mit meinem Wissen.
Folgendes Szenario:
WPF Anwendung mit EF6 und SQL DB
Wenn ich ein Unicode Zeichen direkt in der DB speichere wird mir dieses zwar nicht in der DB aber im Programm angezeigt.
Wenn ich in der DB den Unicode eintrage (z.B. \uF26C) so wird mir im Programm auch nur der Text "\uF26C" angezeigt. Wenn ich in dem Binding einen Converter einbaue und als Return Wert fest 'return "\uF26C"' eintrage wird mir das Zeichen korrekt angezeigt.
Ich benutze Font Awesome.
Binding:
Text="{Binding Path=Symbol, Converter={StaticResource SymbolCon}}" FontFamily="{StaticResource FontAwesome}"

Also:
Unicode als Zeichen in der DB speichern klappt, würde es aber lieber als Zeichenfolge speichern. Dann wird mir aber die Zeichenfolge statt des Symbols angezeigt.

Vielen Dank im Voraus
 
Dein Problem interpretiere ich folgend:
Beim Eintragen von "\uF26C" in die DB speichert die DB "\uF26C" als String und NICHT das jeweilige Zeichen. Deswegen wird beim rauslesen (C# Anwendung) auch wieder "\uF26C" dargestellt. Wenn du jetzt einen manuellen Konverter laufen lässt, gibst du ihm natürlich die Anweisung den String "\uF26C" als Zeichen (Unicode F26C) zu interpretieren, was natürlich zum richtigen Zeichen führt.

Lösungsmöglichkeiten:
1. Darauf verzichten, manuell (d.h. ohne die C# Anwendund) in die DB zu schreiben
2. Du schreibst das Zeichen einzeln korrekt rein (d.h. nicht als "\uF26C")
3. C# Anwendung benötigt einen Konverter (in deinsem Szenario wohl mit Erkennung ob "gültiger String" oder "einzelnes Zeichen")
 
  • Gefällt mir
Reaktionen: I'm unknown
Ansonsten wie hier beschrieben, die Strings aus der DB mit Hilfe des Converters dadurch jagen:
C#:
Encoding.UTF8.GetString(Encoding.Convert(Encoding.Unicode, Encoding.UTF8, Encoding.Unicode.GetBytes(myString)));

Das wandelt den Unicode in UTF-8 um
 
@andy_0
In die DB schreibe ich in diesem Programm noch nichts. Zum Testen habe ich alles im SQL Management Studio eingetragen.
Unicode als Symbol in die DB gespeichert -> alles OK im Programm.
Unicode als Zeichenfolge gespeichert -> Zeichenfolge im Programm.

@xxhagixx
Die Möglichkeit habe ich auch schon gefunden. Aus irgendeinem Grund wird dann trotzdem die Zeichenfolge ausgegeben.

EDIT: Ich denke ich habs! Mit Regex.Unescape() wird alles richtig dargestellt. Eventuell macht das EF ein zweites "\" vor die Zeichenfolge, damit der Text "richtig" dargestellt wird. Das ist in diesem Fall aber ja genau das, was ich nicht möchte.
 
Zuletzt bearbeitet:
Zurück
Oben