2017-01-09 3 views
1

Ich versuche, eine Zeichenfolge zu entkommen, um sicherzustellen, dass Sonderzeichen maskiert sind.StringEscapeUtils escapeJava entkommt Pfund Zeichen

Mit

StringEscapeUtils.escapeJava("") escapes to \\uD83D\\uDE00 

StringEscapeUtils.escapeJava("% ! @ $^& * ") doesn't escape any of the characters 

StringEscapeUtils.escapeJava("£") escapes to \\u00A3 

kann ich verstehen, dass Emojis Schrägstriche enthalten und so entkommen sind, aber warum ist das Pfund-Zeichen entgangen ist, und wie verhindere ich es aus entkommen werden?

+1

Nie benutzt Commons utils, aber ich würde Ihnen empfehlen, JavaDocs von 'StringEscapeUtils.escapeJava()' zu lesen. – Sufian

+0

@Sufian Die [Dokumentation] (https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringEscapeUtils.html#escapeJava-java.lang.String-) tut dies nicht Erwähnen Sie Pfund-Symbole. Ich verstehe nicht, warum das abgelehnt wurde - ich denke, das ist eine vollkommen gültige Frage. – cubrr

+1

Die Dokumentation sagt: Beendet die Zeichen in einem String mit 'Java String rules'. Also, Sufian hat Recht – Valijon

Antwort

2

Die Dokumentation von StringEscapeUtils.escapeJava() ist vage auf genau, was "Java String rules" sind.

Ich denke, es ist mit dem Bit in JLS Chapter 3 Bezug genommen wird, wo es heißt:

Programme werden in Unicode geschrieben (§ 3.1), aber lexikalische Übersetzungen werden zur Verfügung gestellt (§ 3.2), so dass Unicode entkommt (§ 3.3) kann verwendet werden, um jedes Unicode-Zeichen zu verwenden, das nur ASCII-Zeichen verwendet.

und

ASCII (ANSI X3.4) ist der amerikanische Standard Code for Information Interchange. Die ersten 128 Zeichen der Unicode UTF-16-Codierung sind die ASCII-Zeichen.

So könnte es bedeuten, die Zeichenfolge zu entkommen, so dass es nur ASCII-Zeichen geschrieben werden können.

%, !, @, $, ^, & und * sind alle ASCII-Zeichen. Sie haben Werte von weniger als 128 (d. H. Sie sind im 7-Bit-Block).

£ ist kein ASCII-Zeichen: In ISO8859-1 ist es als 163 (0xA3) codiert, was außerhalb des 7-Bit-ASCII-Blocks liegt.

Wenn Sie eine Datei mit dem Zeichen £ in einem Zeichenfolgenliteral öffnen, wird sie möglicherweise als etwas anderes gerendert, wenn dieser Editor die Zeichencodierung nicht korrekt einstellt. Zum Beispiel könnte es Ł sein, wenn es in ISO8859-2 interpretiert wird.

Um eindeutig zu sein, ist das Rautenzeichen daher ausgeblendet.

wie verhindere ich es von

entkommen werden Sie können nicht, diese Methode verwendet wird; Sie müssten eine Alternative finden. Das einzige, was Sie tun können, wäre, die \u00A7 s in der Zeichenfolge wieder durch £ zu ersetzen.

+1

Es ist nicht garantiert, dass Java-Quelldateien UTF-8-codiert sind. Auf den meisten Plattformen und in IDEs wie Eclipse werden sie mit dem Standard der Plattform codiert, was zum Beispiel os x nicht UTF-8 wäre. Eine gute Vorgehensweise besteht darin, UTF-8 als Standard in Ihren IDEs zu erzwingen und Dateien zu erstellen. Also, Flucht ist die richtige Sache. Wenn Sie dies nicht tun, werden Sie irgendwann einige lustige Probleme bekommen, wenn jemand einige Zeichen außerhalb des Ascii-Bereichs in z. Variablennamen oder String-Literale. –

Verwandte Themen