2012-12-19 17 views
6

Http Post Body üzerinden geçmem gereken bir Gson'da Umlauts (ä, ü, ö) kullanıyorum.Java: Gson ve kodlama

Maalesef, Umlauts bir şekilde dönüştürülmediyse, web uygulamam null döndürecek ve değiller.

içerik türü "uygulama/json"

nasıl GSON (Sesli harfler, değerleri olmayan anahtarları) düzgün Sesli harfler kodlamak için söylemek do?

+1

"Noktalı harfler nasılsa dönüştürülür değilse benim web uygulaması boş dönecektir": Burada, sorun ortadan kodlayan UTF için HttpClient yapılandırarak benim çalışma kodudur. –

+0

Eğer yardımcı olursa, bir MVC 4 uygulamasıdır. Vücudunda kodlama yapmadan Umlauts'u kabul etmeli veya yapmamalı mıyım? – cdbeelala89

+0

'application/json' Unicode'u (ve dolayısıyla Umlauts.) Kabul etmelidir. [Spec] 'dan (http://www.ietf.org/rfc/rfc4627.txt): _" JSON metin UNICO olarak kodlanmalıdır. Varsayılan kodlama UTF-8'dir. "_ Web uygulaması bunu kabul etmezse, JSON'u kabul etmez. – McDowell

cevap

2

Sen

charset=UTF-8 

kodlamayı zorlamak için ayarlamak için deneyebilirsiniz.

+0

maalesef bu yardımcı olmadı (http başlığında ayarlama) – cdbeelala89

0

Bildirimleri, gson'a geçmeden önce ondalık varlıklar olarak kodlayabilirsiniz. Json'dan , bu varlıkları deşifre edebilirsiniz.

/* 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

Bunu nasıl yaparım? Normalde sadece toGson'a (object). – cdbeelala89

+0

Nesne değişkenine değer ayarlamadan önce ti json dönüştürmek için yukarıdaki yöntemi dizge kodlamak için uygulayın. –

6

JSON'ta bir web hizmetine ulaştırma işleminde aynı sorunu yaşadım. Web sunucusu bu karakterleri doğru olarak çözemedi. Sorun web uygulaması ile yani

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

Teşekkürler, benim durumumda httpParams eksik kısımlardı. – Locked