2012-07-24 11 views
9

En el campo de texto, si copio desde la palabra, se inserta el carácter no deseado. Al publicar parámetros desde la página jsp, sigue estando bien. Pero al obtener el parámetro en java se convierte en basura. He utilizado el siguiente código para eliminar basura antes de la inserción. Estoy usando la base de datos mysql. (JBOSS 5.1 servidor GA)Eliminación de elementos no deseados en 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(); 
} 

pero todavía estoy recibiendo carácter no deseado para comilla simple ('') y comillas dobles (""). Necesito la cadena en UTF-8. ¿Alguien puede sugerir dónde puedo estar equivocado?

Ejemplo: Entrada - "esgh". salida - â ?? esghâ ??: Salida deseada - "esgh".

+5

¿Puede dar algunos ejemplos de entrada y salida deseada? – Keppil

+0

He dado un ejemplo. pero sucede para una comilla simple también. –

+0

¿No podría filtrar por valores ASCII? Simplemente tome todo lo que sea mayor que 31 y menor que 128. –

Respuesta

5

Tiene que intercambiar las llamadas de codificación y descodificación. Plus; ¡estás decodificando dos veces, solo para una codificación!

Usted escribió:

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

Pero, obviamente, tiene que ser:

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

En primer lugar, usted tiene que codificar el texto, a continuación, decodificar el resultado codificado.

+0

Pero el método de codificación no es aplicable para el argumento ByteBuffer. Lanza error. –

+0

Oh, sí, tienes razón. Cambia los búferes también. Mira mi respuesta editada. –

+0

Gracias por el esfuerzo. pero aún así no elimina la basura. Estoy obteniendo el mismo resultado que antes. –

0

La respuesta de Martijn Courteaux debería darle la salida esperada. Pero una vez que intente con la configuración del servidor CHARACTER y COLLATION. Establezca en UTF-8.

Espero que funcione.

0

Compruebe si el servidor web/de aplicaciones está enviando los datos correctos.

¿Qué servidor web/aplicación está utilizando?

¿Está utilizando un campo de texto simple o cualquier otro?

1

Si copia texto de Microsoft Word, tiene la función 'Cotizaciones inteligentes' que puede y se disparará algunas veces al codificar/decodificar. Intente utilizar la codificación Windows-1252 como fuente de codificación. Además, sugeriría usar String#getBytes(String) y String#String(byte[],Charset) para las conversiones, sin necesidad de meterse con los almacenamientos intermedios en este nivel.

Cuestiones relacionadas