2012-06-26 10 views
10

Quiero enviar datos arábiga de servlet utilizando HTTPServletResponse al clienteEnvío de los valores UTF-8 en los resultados de las cabeceras HTTP en mojibake

estoy tratando este

response.setCharacterEncoding("UTF-8"); 
response.setHeader("Info", arabicWord); 

y recibo la palabra como esta

String arabicWord = response.getHeader("Info"); 

en el cliente (receptor) también probamos este

byte[]d = response.getHeader("Info").getBytes("UTF-8"); 
arabicWord = new String(d); 

pero parece que no hay unicode porque recibo palabras inglesas extrañas, así que ¿cómo puedo enviar y recibir palabras en árabe utf8?

Respuesta

27

Los encabezados HTTP no son compatibles con UTF-8. Oficialmente solo son compatibles con ISO-8859-1. Ver también RFC 2616section 2:

Palabras de * texto puede contener caracteres de juegos de caracteres distintos ISO 8859-1 [22] sólo cuando codificada de acuerdo con las reglas de la RFC 2047 [14].

Su mejor opción es codificar URL y descodificarlas.

response.setHeader("Info", URLEncoder.encode(arabicWord, "UTF-8")); 

y

String arabicWord = URLDecoder.decode(response.getHeader("Info"), "UTF-8"); 

codificación URL los transformará en %nn format que es perfectamente válido ISO-8859-1. Tenga en cuenta que los datos enviados en los encabezados pueden tener limitaciones de tamaño. En su lugar, envíela en el cuerpo de respuesta en formato de texto plano, JSON, CSV o XML. El uso de encabezados HTTP personalizados de esta manera es a saber, un olor de diseño.

+0

lo intentaré, – Totti

+0

nuevamente thaaaaaaaaaaaaaa, realmente gracias – Totti

+0

Necesitaba pasar una cadena UTF-8 de PHP a Javascript a través de encabezados HTTP comunes y la codificación de URL ayudó, ¡gracias! –

2

no sé donde word variable está viniendo de, pero intente esto:

arabicWord = new String(d, "UTF-8"); 

ACTUALIZACIÓN: Parece que el problema es con UTF-8 datos codificados en HTTP cabeceras , ver: HTTP headers encoding/decoding in Java de discusión detallada.

+0

ya lo intenté y no funciona, vea la edición – Totti

+0

@Totti: vea mi actualización y lea http://stackoverflow.com/questions/324470 –

+0

comprobaré, gracias – Totti

Cuestiones relacionadas