none
c# String Escapezeichen RRS feed

  • Frage

  • Hallo zusammen,

    ich habe leider über die Suche keine passende Antwort auf meine Frage bekommen oder ich habe einfach einen Denkfehler.

    Ich erhalte über 

    System.Security.Principal.WindowsIdentity.GetCurrent().Name

    den derzeitigen User in einen String.

    Dieser String hat dann bei mir das Format <Domäne>\\<Username>. Da ich den Username in eine Datenbank schreiben will, möchte ich gern das \\ durch \ ersetzen und nutze dafür die string.Replace Funktion. 

    user.Replace("\\\\",@"\");

    allerdings liefert mir das wieder den String mit \\ ich habe schon sämtliche Kombinationen getestet aber bekomme es einfach nicht zu einem einfachen Backslash konvertiert. 

    Ich hoffe jemand kann mir einen Tipp geben. :)

    Danke im Voraus!

    Mittwoch, 29. Juni 2016 13:22

Antworten

  • Hallo Stefan,

    das Problem mit dem doppelten Backslash hast Du maximal in der Anzeige. Bei der Weiterverarbeitung ist das schon korrekt.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert Stefan Jakob Donnerstag, 30. Juni 2016 07:42
    Mittwoch, 29. Juni 2016 13:32
    Moderator
  • Hallo Stefan Jakob,

    die Frage ist wie du dir hast ausgeben lassen was dir dein Einzeiler zurück gibt. Die Überwachen-Fenster sowie die DataTips vom Visual Studio Debugger zeigen die Werte nämlich in der Syntax der jeweiligen Programmiersprache an. Wenn du also ein \ im String stehen hast, wird entsprechend ein "\\" im Debugger angezeigt.

    Gibst du das ganze Dagegen im Ausgabefenster (Debug.WriteLine), der Konsole (Console.WriteLine) oder irgendwie anders direkt in deinem Programm aus, dann siehst du auch nur einen \. Genauso verhält es sich wenn du den String in die Datenbank schreibst, diese wird ohne dem Aufruf von Replace auch nur ein \ erhalten.

    Wie dir vielleicht bekannt ist hängt das ganze mit den Escapesequenzen zusammen. Denn einige Kombinationen mit vorangestelltem \ sind spezielle Zeichen (Zeilenumbrüche mit \r und \n, ...). \\ ergibt entsprechend den normalen \. In Verbatim-Strings mit @ dagegen gibt es keine Escapesequenzen in dieser Form.

    Soweit die Erklärung zu dem "Phänomen".

    @Marcus So funktioniert das hier nicht. Das @ hilft nur direkt vor Stringliteralen um darauf Verbatim-Strings zu machen. Überall anders braucht man es auch gar nicht.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    • Als Antwort markiert Stefan Jakob Donnerstag, 30. Juni 2016 07:42
    Mittwoch, 29. Juni 2016 18:43
    Moderator

Alle Antworten

  • Hallo Stefan,

    das Problem mit dem doppelten Backslash hast Du maximal in der Anzeige. Bei der Weiterverarbeitung ist das schon korrekt.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert Stefan Jakob Donnerstag, 30. Juni 2016 07:42
    Mittwoch, 29. Juni 2016 13:32
    Moderator
  • Hallo Stefan,

    versuch es mal so:

    String user = @System.Security.Principal.WindowsIdentity.GetCurrent().Name;

    Mit dem @ machst sagst du das Escape-Zeichen ignoriert werden ;)

    Gruß

    Marcus

    Mittwoch, 29. Juni 2016 13:32
  • Hallo Stefan Jakob,

    die Frage ist wie du dir hast ausgeben lassen was dir dein Einzeiler zurück gibt. Die Überwachen-Fenster sowie die DataTips vom Visual Studio Debugger zeigen die Werte nämlich in der Syntax der jeweiligen Programmiersprache an. Wenn du also ein \ im String stehen hast, wird entsprechend ein "\\" im Debugger angezeigt.

    Gibst du das ganze Dagegen im Ausgabefenster (Debug.WriteLine), der Konsole (Console.WriteLine) oder irgendwie anders direkt in deinem Programm aus, dann siehst du auch nur einen \. Genauso verhält es sich wenn du den String in die Datenbank schreibst, diese wird ohne dem Aufruf von Replace auch nur ein \ erhalten.

    Wie dir vielleicht bekannt ist hängt das ganze mit den Escapesequenzen zusammen. Denn einige Kombinationen mit vorangestelltem \ sind spezielle Zeichen (Zeilenumbrüche mit \r und \n, ...). \\ ergibt entsprechend den normalen \. In Verbatim-Strings mit @ dagegen gibt es keine Escapesequenzen in dieser Form.

    Soweit die Erklärung zu dem "Phänomen".

    @Marcus So funktioniert das hier nicht. Das @ hilft nur direkt vor Stringliteralen um darauf Verbatim-Strings zu machen. Überall anders braucht man es auch gar nicht.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    • Als Antwort markiert Stefan Jakob Donnerstag, 30. Juni 2016 07:42
    Mittwoch, 29. Juni 2016 18:43
    Moderator
  • Ich habe mich hier tatsächlich vom Debugger überlisten lassen.

    Habe noch keine Ausgabe gemacht, sondern möchte die Daten in eine Datenbank schreiben und habe deshalb einfach im Debugger mal in den String geschaut ob das funktioniert. Das mir die Überwachung im Debugger die Strings mit Escapezeichen anzeigt wusste ich bisher nicht.

    Das ist mein erstes Projekt mit C# also wieder was dazu gelernt :)

    Danke nochmal!

    Donnerstag, 30. Juni 2016 07:46