2012-12-19 16 views
6

Sto usando Umlauts (ä, ü, ö) in un Gson che devo passare tramite Http Post Body.Java: Gson e codifica

Sfortunatamente, la mia app Web restituirà null se gli Umlauts non vengono convertiti in qualche modo, e non lo sono.

Content-Type è "application/json"

Come faccio a dire GSON per codificare i dieresi correttamente (le dieresi sono nei valori, non i tasti)?

+1

"la mia web app restituirà null se le dieresi non sono convertiti in qualche modo" in modo che il problema è con web-app. –

+0

È un'app MVC 4 se questo aiuta. Dovrebbe accettare Umlaut senza codificare nel corpo o no? – cdbeelala89

+0

'application/json' deve accettare Unicode (e quindi Umlauts.) Dalla [specifica] (http://www.ietf.org/rfc/rfc4627.txt): _" Il testo JSON DEVE essere codificato in Unicode. la codifica è UTF-8. "_ Se l'applicazione web non lo accetta, non accetta JSON. – McDowell

risposta

2

Si potrebbe provare a impostare

charset=UTF-8 

per forzare la codifica.

+0

sfortunatamente questo non ha aiutato (impostandolo nell'intestazione http) – cdbeelala89

0

È possibile codificare gli Umlaut in entità decimali prima di passare a gson. da json è possibile decodificare queste entità.

/* encode unicode characters in a given string */ 
    private static String getEncodedText(String text) { 
     StringBuilder sb = new StringBuilder(); 

     for (int i = 0; i < text.length(); i++) { 
      char ch = text.charAt(i); 
      int codePoint = text.codePointAt(i); 

      if (codePoint >= 0 && codePoint <= 126 
        && (codePoint != 34 && codePoint != 39 
          && codePoint != 60 && codePoint != 62 
          && codePoint != 94 && codePoint != 96 && codePoint != '_')) { 
       sb.append(ch); 
       continue; 
      } 


      sb.append(convertToEntity(String.valueOf(codePoint))); 
     } 

     return sb.toString(); 
    } 


    public static String convertToEntity(String decimalValue) { 
     return "&#" + decimalValue+ ";"; 
    } 
+0

Come dovrei farlo? Normalmente ho solo per toGson (oggetto). – cdbeelala89

+0

prima di impostare il valore sulla variabile oggetto che si desidera convertire ti json applica sopra il metodo per codificare la stringa. –

6

Ho avuto lo stesso problema passando umlaut a un servizio Web in JSON. Il server web non è in grado di decodificare correttamente tali caratteri. Configurando il HttpClient per UTF codifica il problema è scomparso, ecco il mio codice di lavoro:

HttpParams httpParams = new BasicHttpParams(); 
HttpProtocolParams.setContentCharset(httpParams, HTTP.UTF_8); 
HttpProtocolParams.setHttpElementCharset(httpParams, HTTP.UTF_8); 
HttpClient client = new DefaultHttpClient(httpParams); 
HttpPost request = new HttpPost(serverURL); 
StringEntity str = null; 
String jsonString = gson.toJson(yourdata); 
str = new StringEntity(jsonString, HTTP.UTF_8); 
request.setEntity(str); 
request.setHeader("Accept", "application/json"); 
request.setHeader("Content-type", "application/json"); 
client.execute(request); 
+0

Grazie, i httpParams erano la parte mancante nel mio caso. – Locked