2012-07-24 12 views
9

Im Textfeld, wenn ich von Word kopieren, Junk-Zeichen eingefügt werden. Beim Veröffentlichen von Parametern von der jsp-Seite bleibt es in Ordnung. Aber während der Parameter in Java abgerufen wird, wird er in Junk umgewandelt. Ich habe den folgenden Code verwendet, um Müll vor dem Einfügen zu beseitigen. Ich benutze MySQL-Datenbank. (JBOSS 5.1 GA-Server)Junk-Zeichen entfernen in Java

String outputEncoding = "UTF-8"; 

Charset charsetOutput = Charset.forName(outputEncoding); 
CharsetEncoder encoder = charsetOutput.newEncoder(); 
byte[] bufferToConvert = userText.getBytes(); 
CharsetDecoder decoder = (CharsetDecoder) charsetOutput.newDecoder(); 
try { 
    CharBuffer cbuf = decoder.decode(ByteBuffer.wrap(bufferToConvert)); 
    ByteBuffer bbuf = encoder.encode(CharBuffer.wrap(cbuf)); 
    userText = decoder.decode(bbuf).toString(); 
} catch (CharacterCodingException e) { 
    e.printStackTrace(); 
} 

aber ich bin immer noch immer Junk-Zeichen für Apostroph ('') und doppelte Anführungszeichen (""). Ich brauche die Zeichenfolge in UTF-8. Kann jemand vorschlagen, wo ich falsch liegen kann?

Beispiel: Eingabe - "esgh". Ausgabe - â ?? esghâ ??: Gesucht Ausgang - "esgh".

+5

Können Sie ein paar Beispiele für Eingabe und gewünschte Ausgabe geben? – Keppil

+0

Ich habe ein Beispiel gegeben. aber es passiert auch für einfaches Zitat. –

+0

Konnten Sie nicht einfach nach ASCII-Werten filtern? Nehmen Sie einfach alles größer als 31 und kleiner als 128. –

Antwort

5

Sie müssen die codieren und decodieren Anrufe umgehen. Plus; Sie dekodieren zweimal, für nur eine Kodierung!

Sie schrieb:

CharBuffer cbuf = decoder.decode(ByteBuffer.wrap(bufferToConvert)); 
ByteBuffer bbuf = encoder.encode(CharBuffer.wrap(cbuf)); 
userText = decoder.decode(bbuf).toString(); 

Aber offensichtlich muss es sein:

ByteBuffer bbuf = encoder.encode(CharBuffer.wrap(userText)); 
CharBuffer cbuf = decoder.decode(bbuf); 
userText = cbuf.toString(); 

Zuerst müssen Sie Ihren Text kodieren, dann dekodiert das kodierte Ergebnis.

+0

Aber die Methode encode ist nicht anwendbar für Argument ByteBuffer. Es wirft einen Fehler auf. –

+0

Oh, ja, du hast Recht. Tausche auch die Puffer. Schau dir meine bearbeitete Antwort an. –

+0

Danke für die Mühe. aber es entfernt immer noch keinen Müll. Ich bekomme das gleiche Ergebnis wie zuvor. –

0

Die Antwort von Martijn Courteaux sollte Ihnen die erwartete Ausgabe geben. Aber versuchen Sie einmal mit dem Server Setup CHARACTER und COLLATION .Set zu UTF-8.

Ich hoffe, es wird funktionieren.

0

Überprüfen Sie, ob der Web-/Anwendungsserver die richtigen Daten sendet.

Welchen Web/Anwendungsserver verwenden Sie?

Verwenden Sie ein einfaches Textfeld oder ein anderes?

1

Wenn Sie Text aus Microsoft Word kopieren, verfügt er über die Funktion "Smart Quotes", die manchmal beim Codieren/Decodieren stolpern kann und wird. Verwenden Sie die Codierung Windows-1252 als Quellcodierung. Auch würde ich empfehlen, String#getBytes(String) und String#String(byte[],Charset) für die Konvertierungen zu verwenden, keine Notwendigkeit, mit Puffern auf dieser Ebene zu verwirren.