2012-06-26 9 views
10

Voglio inviare i dati arabi da servlet utilizzando HTTPServletResponse al clienteInvio valori UTF-8 nelle intestazioni HTTP risultati in mojibake

sto provando questo

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

e ricevo la parola come questo

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

client (ricezione) anche provato questo

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

ma sembra che non ci sia unicode perché ricevo strane parole inglesi, quindi per favore come posso inviare e ricevere parole utf8 arabi?

risposta

27

intestazioni HTTP non supporta UTF-8. Sostengono ufficialmente solo ISO-8859-1. Vedere anche RFC 2616section 2:

Parole di * testo può contenere caratteri set di caratteri diversi ISO-8859-1 [22] solo quando codificato secondo le regole di RFC 2047 [14].

La soluzione migliore è codificare URL e decodificarli.

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

e

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

URL-encoding li trasformerà in %nn format che è perfettamente valido ISO-8859-1. Si noti che i dati inviati nelle intestazioni potrebbero avere limitazioni di dimensioni. Piuttosto, spediscilo nel corpo della risposta, in formato testo, JSON, CSV o XML. L'uso di intestazioni HTTP personalizzate in questo modo è un odore di design.

+0

lo proverò, – Totti

+0

ancora una volta si thaaaaaaaank, davvero grazie – Totti

+0

avevo bisogno di passare una stringa UTF-8 da PHP a JavaScript tramite intestazioni HTTP regolari e URL-codifica aiutato, grazie! –

2

non so dove word variabile sta venendo da, ma provare questo:

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

UPDATE: Sembra che il problema è con UTF-8 dati codificati in HTTP intestazioni, vedere: HTTP headers encoding/decoding in Java per discussione dettagliata.

+0

ho provato già e non funziona, vedere la modifica per favore – Totti

+0

@Totti: vedere il mio aggiornamento e leggere http://stackoverflow.com/questions/324470 –

+0

controllerò, grazie – Totti

Problemi correlati