Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Backslash nicht escapen in einem String?
numpsy
myCSharp.de - Member



Dabei seit:
Beiträge: 231

Themenstarter:

Backslash nicht escapen in einem String?

beantworten | zitieren | melden

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?
Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von numpsy am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.392

beantworten | zitieren | melden

Hi,
Zitat von numpsy
der rückgabewert aus der textbox ist aber: "\\uf3c4\\uf38f\\uf385"
Normales Verhalten in der Anzeige des Debugfensters.
Zitat von numpsy
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ß
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Abt am .
private Nachricht | Beiträge des Benutzers
userid12529
myCSharp.de - Member



Dabei seit:
Beiträge: 208

beantworten | zitieren | melden

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
Attachments
private Nachricht | Beiträge des Benutzers
marsgk
myCSharp.de - Member



Dabei seit:
Beiträge: 1.439
Herkunft: Linz, Austria

beantworten | zitieren | melden

Die zwei Backslashs zeigt nur der Debugger an. Diese sind nicht wirklich im String vorhanden.
private Nachricht | Beiträge des Benutzers
ujr
myCSharp.de - Experte



Dabei seit:
Beiträge: 1.688

beantworten | zitieren | melden

Hallo,

gibst Du das
Zitat von numpsy
\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;
private Nachricht | Beiträge des Benutzers
Darth Maim
myCSharp.de - Member



Dabei seit:
Beiträge: 216

beantworten | zitieren | melden

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

Moderationshinweis von herbivore (04.01.2011 - 11:06)

Mal abgesehen davon, dass der Code nicht mal kompiliert, funktioniert dieser Weg prinzipiell nicht, weil das Umwandeln von \uxxxx Sequenzen in Unicode-Zeichen ein Compiler-Feature ist.

private Nachricht | Beiträge des Benutzers
xxMUROxx
myCSharp.de - Member

Avatar #avatar-3236.jpg


Dabei seit:
Beiträge: 1.552
Herkunft: Südtirol/Italien

beantworten | zitieren | melden

Zitat von Darth Maim
Um aus dem intern in der Textboxstehenden String "\\uf3c4\\uf38f\\uf385"
Es steht nirgendwo dass der String in escapter Form in der Textbox steht.
Zitat von Darth Maim
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:
Zitat von numpsy
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:
Zitat von Abt
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
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo numpsy,
Zitat
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
private Nachricht | Beiträge des Benutzers