Laden...

Backslash nicht escapen in einem String?

Erstellt von numpsy vor 13 Jahren Letzter Beitrag vor 13 Jahren 6.086 Views
Thema geschlossen
N
numpsy Themenstarter:in
231 Beiträge seit 2007
vor 13 Jahren
Backslash nicht escapen in einem String?

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?

16.806 Beiträge seit 2008
vor 13 Jahren

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ß

U
208 Beiträge seit 2008
vor 13 Jahren

Hallo,

bist du dir ganz sicher, dass du den String mit escapten, also doppelten "&quot; 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

M
1.439 Beiträge seit 2005
vor 13 Jahren

Die zwei Backslashs zeigt nur der Debugger an. Diese sind nicht wirklich im String vorhanden.

U
1.688 Beiträge seit 2007
vor 13 Jahren

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;
D
216 Beiträge seit 2009
vor 13 Jahren

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

Hinweis von herbivore vor 13 Jahren

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.

1.552 Beiträge seit 2010
vor 13 Jahren

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("\", "&quot;).

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

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

3.170 Beiträge seit 2006
vor 13 Jahren

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

49.485 Beiträge seit 2005
vor 13 Jahren

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

Thema geschlossen