2016-05-02 9 views
0

Ich habe eine Java-Anwendung, in der eine Zeichenfolge aus einer Datei in UNIX gelesen wird. Anschließend wird die Zeichenfolge mithilfe der URL-POST-Methode an eine andere Anwendung übergeben. Es ist jedoch Probleme haben, wenn es Sonderzeichen wie:Sonderzeichen aus UNIX werden von Java nicht richtig gelesen

~ ^ [ ] \ { } |

Ich bin den Aufbau der URL ein String mit:

new StringBuilder() .append("message=").append(message).toString() 

Gibt es einen Standard, wie sollten diese Zeichen von UNIX auf Java codiert werden? Ich glaube, das ist das Problem hier.

+3

Anteil der Code und die Beispieldatendatei auf Frage .. –

+1

Die, die in der ASCII-Zeichen Frage scheinen . Ist das Problem für ASCII-Zeichen? –

+0

@AjinkyaPatil Die Beispieldatei enthält die Zeichenfolge 'TEST ~^[] \ {} |' und es wird von einem FileReader abgerufen. Diese Zeichenfolge wird dann mithilfe der URL-POST-Methode an eine andere Anwendung übergeben. Ich glaube, hier liegt das Problem. –

Antwort

0

Um Zeichen aus einer Datei in Java korrekt zu lesen, müssen Sie den Zeichensatz angeben. Z.B.

String charset = "UTF-8"; // replace with what you are really using in your Unix system 
Reader reader = new InputStreamReader(new FileInputStream(file), charset); 
// use the reader... 
+0

Die Zeichen nach OP sind einfache ASCII-Zeichen (Codes unter 127). Sie sollten den gleichen Code erhalten, egal welche Kodierung verwendet wird. –

+0

@SergeBallesta jemals über EBCDIC gehört? – Henry

+0

@Henry Ich würde postulieren, dass die Wahrscheinlichkeit, dass die OP-Datei in EBCDIC kodiert ist, verschwindend gering ist. – davmac

1

Das sind Zeichen für einen regelmäßigen Ausdruck verwendet: so (Fehlerbehandlung der Kürze halber weggelassen).

Also irgendwo platzieren Sie die Zeichenfolge in einer Position, wo eine Regex erwartet wird.

  • replaceFirst
  • replaceAll statt ersetzen
  • gespalten
  • Format
  • printf

Encoding kann hier nicht den Fehler sein (normal ASCII-Funktionen). Beachten Sie jedoch, dass FileReader eine alte Dienstprogrammklasse ist, die eine Datei mit der Standard-Plattformcodierung liest. Wenn die Datei in einem bekannten Codierung ist, sagen die UTF-8, besser:

Path path = file.toPath(); 
try (BufferedReader in = Files.newBufferedReader(path, StandardCharsets.UTF_8)) { 
    ... 
} 
0

Eine URL erfordert, dass bestimmte Zeichen codiert werden. Dies hat nichts mit Unix oder Java zu tun; Es ist Teil der Spezifikation für URLs.

In Java können Sie beliebigen Text verschlüsseln, um es für URLs über das URLEncoder.encode Verfahren geeignet zu machen:

new StringBuilder() 
     .append("message=") 
     .append(URLEncoder.encode(message, "UTF-8")) 
     .toString() 
+0

Danke dafür, aber ich stelle fest, dass wenn ich die Zeichenfolge mit anderen Zeichenfolgen verkette, habe ich Probleme nochmal. Zum Beispiel String message = "TEST ~^[] \ {} |"; funktioniert es Aber wenn ich es versuche String message = "TEST ~^[] \ {} |" + Nachricht2; es funktioniert nicht –

+0

@JustineAguas wie ich in Kommentaren auf Ihre Frage oben gesagt, muss Ihre Frage abgeschlossen sein. Ich kann nicht sehen, was mit deinem Code an den kleinen Teilen falsch ist, die du versuchst. Sie müssen ein [MCVE] nachweisen. – davmac