Weiter zum Inhalt

03.04 Escape-Sequenzen

Um bestimmte Zeichen in Strings oder chars darzustellen, ist es notwendig diese zu maskieren. Einige Zeichen werden also durch so genannte Escape-Sequenzen dargestellt. Wie sollte auch sonst in einem String ein doppeltes Hochkomma dargestellt werden, ohne die Zeichenkette vorzeitig zu beenden?


Sequenz Bedeutung
\b Rückschritt (Backspace)
\t Horizontaler Tabulator
\n Zeilenumbruch
\f Seitenumbruch (Formfeed)
\r Wagenrücklauf (Carriage return)
\” Doppeltes Anführungszeichen
\’ Einfaches Anführungszeichen
\\ Backslash
\nnn Oktalzahl nnn (kann auch kürzer als 3 Zeichen sein, darf nicht größer als Oktal 377 sein)
\uXXXX Unicode XXXX (hexadezimal)

Um ein einfaches Anführungszeichen in einem String darzustellen muss dieses nicht maskiert werden – in einem char allerdings schon.

char hochkomma = '\'';

Ein Beispiel:

System.out.println("Peter sagte:\"Hallo Monika!\"\nWoraufhin " +
  "Monika antwortete:\"Hi Peter.\"");

{ 7 } Comments

  1. Angelika | 25. März 2012 um 18:11 | Permalink

    Hallo,

    wie kann ich eine DINA4 Seite Text escapen?
    Alles händig zu durchsuchen und escapen dürfte etwas lange dauern?

    Grüße,
    Angelika

  2. Stefan Kiesel | 25. März 2012 um 18:23 | Permalink

    Hallo Angelika,

    ich verstehe leider nicht genau, was sie machen wollen. In welchem “Format” liegt die DINA4-Seite vor? Wollen Sie den Text automatisch von Java escapen lassen?

    Grüße
    Stefan

  3. Angelika | 25. März 2012 um 20:09 | Permalink

    DINA4 war auf die Text-Mänge bezogen.
    Ja, ich möchte gerne viel Text automatisch escapen lassen.

    Grüße,
    Angelika

  4. Stefan Kiesel | 25. März 2012 um 20:10 | Permalink

    Und warum sollte man einen bereits getippten Text escapen? In welchem Format liegt der Text vor?

    Sorry, ich kann gerade nicht nachvollziehen, was Sie hören möchten.

    Grüße
    Stefan

  5. Angelika | 26. März 2012 um 12:16 | Permalink

    Bsp1:
    Angenommen ich möchte sowas ähnliches wie z.B. http://nopaste.info/ nachprogrammieren.
    Dann möchte ich gerne mein Quelltext (bereits getippt) innerhalb der DB speichern.

    Bsp2:
    Ich bin gerade dabei XSS zu testen. Hierfür möchte ich JavaScript innerhalb der DB speichern.

    Ich hoffe, mein Anliegen ist etwas klarer geworden.

    Grüße,
    Angelika

  6. Angelika | 26. März 2012 um 12:20 | Permalink

    Mein Anliegen lässt sich mit “StringEscapeUtils” realisieren:
    http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/StringEscapeUtils.html

  7. Stefan Kiesel | 26. März 2012 um 12:29 | Permalink

    Hallo Angelika,

    Sie müssen nur Texte, die sie direkt (hart) in (Java-)Quellcode einprogrammieren escapen. Bspw.

    String test ="Zeilen\numbruch";

    Texte, die von außerhalb des Programms eingelesen werden (bspw. indem Sie sich den Text aus einer JTextArea in Java, einer textarea in HTML oder aus einer Datei auf der Festplatte holen) müssen nicht escaped werden, um sie in einem Programm, bspw. gespeichert in einem String, zu verwenden. Das Escapen dient vereinfacht gesagt nur dem Compiler/Interpreter, um festzustellen, dass Sie irgendwelche Sonderzeichen darstellen möchten, die sich sonst im Quelltext einer Programmiersprache nicht abbilden lassen würden.

    Wenn Sie via SQL Texte in eine Datenbank schicken wollen, dann müssen Sie entweder das Escapen selbst übernehmen (bspw. mit Hilfe von regulären Ausdrücken oder Suchkonstruktionen mit Schleifen) oder, was sinnvoller ist und nahezu in jeder Programmiersprache zur Verfügung steht, Sie lassen den Text automatisch escapen, indem Sie die Aufgabe durch Verwendung entsprechender Konstrukte dem Datenbanktreiber abtreten. In Java würden Sie das bspw. mit PreparedStatements und der setXYZ, konkret setString-Methoden realisieren.

    Ich hoffe ich konnte Ihre Frage beantworten. Ansonsten bitte einfach noch einmal nachfragen.

    Grüße
    Stefan

Kommentar verfassen

Dein E-Mail wird nicht veröffentlicht oder weitergegeben. Pflichtfelder sind mit * markiert.
*