Hallo,
habe eine Textbox, die einen String beginnend sowie innerhalb mit einem \ hat
nun will ich in dem string das escapen wegbekommen? sprich jedes doppelte \
bsp: ich gebe in die textbox: \uf3c4\uf38f\uf385 ein
der rückgabewert aus der textbox ist aber: "\uf3c4\uf38f\uf385" was nicht geht
replace, split usw habe ich schon probiert ohne erfolg
also ziel ist ne funktion damit aufzurufen und wenn man es direktübergibt gehts aber nicht als parameter? myFct("\uf3c4\uf38f\uf385"); kann man aufrufen
letzter ansatz war auch nicht erfolgreich mit:
public static string RemoveDoubleEscape(string input)
{
StringBuilder output = new StringBuilder(string.Empty);
if (!string.IsNullOrEmpty(input))
{
for (int i = 0; i < input.Length; i++)
output.AppendFormat("{0}", (input.Substring(i, 1))[0]);
}
return output.ToString();
}
ideen?
Hi,
der rückgabewert aus der textbox ist aber: "\uf3c4\uf38f\uf385"
Normales Verhalten in der Anzeige des Debugfensters.
also ziel ist ne funktion damit aufzurufen und wenn man es direktübergibt gehts aber nicht als parameter? myFct("\uf3c4\uf38f\uf385"); kann man aufrufen
letzter ansatz war auch nicht erfolgreich mit:
public static string RemoveDoubleEscape(string input) { StringBuilder output = new StringBuilder(string.Empty); if (!string.IsNullOrEmpty(input)) { for (int i = 0; i < input.Length; i++) output.AppendFormat("{0}", (input.Substring(i, 1))[0]); } return output.ToString(); }
ideen?
Vielleicht Regex.Unescape(string); ?
Das Problem beim Parameter ist, dass Du ein @ vor dem String brauchst, da ansonsten das nachfolgende Zeichen "escaped" wird.
Gruß
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo,
bist du dir ganz sicher, dass du den String mit escapten, also doppelten "" erhältst? Ist das denn nicht einfach nur die Anzeige im Überwachungsfenster des Debuggers?
Wenn ich ein frisches C#-Projekt erstelle, darin eine Textbox und mir den Inhalt davon per Button-Klick ausgebe sieht alles ganz normal aus (ohne escaptes Backslash).
Hab das Beispielprojekt mal in den Anhang gepackt.
Gruß,
Andreas
Die zwei Backslashs zeigt nur der Debugger an. Diese sind nicht wirklich im String vorhanden.
Hallo,
gibst Du das
\uf3c4\uf38f\uf385
in eine TextBox ein, sind das 18 Zeichen - was Du willst sind aber drei. Du müsstest also die hexadezimalen Ziffern nach \u jeweils in einen char umwandeln:
char c=(char)0xf3c4;
Um aus dem intern in der Textboxstehenden String "\uf3c4\uf38f\uf385" den String "\uf3c4\uf38f\uf385" zu machen, was 3 Buchstaben entspricht, sollte
output = input.Replace("\\", "\")
reichen. Zumindest bin ich der Meinung das ich das selber so schon mehrmals gemacht habe.
Darth Maim
Mal abgesehen davon, dass der Code nicht mal kompiliert, funktioniert dieser Weg prinzipiell nicht, weil das Umwandeln von \u_xxxx_ Sequenzen in Unicode-Zeichen ein Compiler-Feature ist.
Um aus dem intern in der Textboxstehenden String "\uf3c4\uf38f\uf385"
Es steht nirgendwo dass der String in escapter Form in der Textbox steht.
output = input.Replace("\", "").
Ist sinnlos, wieso wurde schon besprochen.
Irgendwie sehe ich mitlerweile nicht mehr das konkrete Thema des Threads heraus?
Was soll nun gemacht werden:
ujr hat eine Lösung um die Hex nach char zu convertieren.
Frage war jedoch:
also ziel ist ne funktion damit aufzurufen und wenn man es direktübergibt gehts aber nicht als parameter
Wenn nur eine Antwort auf dieses Problem gesucht wird, dann ist folgendes die Antwort:
Das Problem beim Parameter ist, dass Du ein @ vor dem String brauchst, da ansonsten das nachfolgende Zeichen "escaped" wird.
Also myFct(@"thisisMy\nString");
Übergeben wird dann
thisisMy\nString
und nicht
thisisMy String
Wenn jedoch der Text der Textbox übernommen werden soll dann reicht wenn die Methode myFct(textbox.Text)
aufgerufen wird.
Gruß
Michael
Hallo zusammen,
es geht ja immer offenbar noch um die Problematik in Bedeutung von \uxxxx in Strings
Zur Frage in diesem Thread:
\u ist eine Escapesequenz für den Compiler, dieser macht daraus die entsprechenden Unicode-Zeichen - und bringt nur was, wenn es in einer C#-Codedatei steht.
Mit String-Escapesequenzen hat das nichts zu tun und so ist der Sache auch nicht beizukommen.
Was ujr schreibt, ist vollkomen richtig, man muss das aus den Hexadezimalwerten selbst umwandeln, wenn man die Unicode-Zeichen haben will.
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Hallo numpsy,
man muss das aus den Hexadezimalwerten selbst umwandeln, wenn man die Unicode-Zeichen haben will.
... oder eben den String direkt als Literal in den Code tippen statt in eine TextBox, wie ich das schon in dem anderen Thread geschrieben hatte.
Bitte keine Crossposts, schon gar nicht für bereits ausreichend beantwortete Fragen.
herbivore