2012-12-19 23 views
6

मैं एक जीसन में उमलॉट्स (ä, ü, ö) का उपयोग कर रहा हूं जिसे मुझे एचटीपी पोस्ट बॉडी के माध्यम से पारित करने की आवश्यकता है।जावा: जीसन और एन्कोडिंग

असुविधाजनक रूप से, अगर मेरा वेब ऐप किसी भी तरह परिवर्तित नहीं होता है तो मेरा वेब ऐप शून्य हो जाएगा, और वे नहीं हैं।

सामग्री प्रकार "application/json"

मैं Gson कैसे बता ठीक से Umlauts एन्कोड करने के लिए करते हैं (उमलॉट कुंजियाँ नहीं मान में हैं) है?

+1

"मेरे वेब अनुप्रयोग अशक्त वापस आ जाएगी अगर Umlauts किसी भी तरह परिवर्तित नहीं कर रहे हैं" तो समस्या वेब अनुप्रयोग के साथ है: एन्कोडिंग समस्या गायब हो गया यूटीएफ के लिए HttpClient को विन्यस्त, यहाँ तक मेरे कार्य कोड है। –

+0

यह एक एमवीसी 4 ऐप है अगर यह मदद करता है। शरीर में एन्कोडिंग के बिना Umlauts स्वीकार करना चाहिए या नहीं? – cdbeelala89

+0

'एप्लिकेशन/जेसन' को यूनिकोड (और इसलिए उमलॉट्स) को स्वीकार करना चाहिए [spec] (http://www.ietf.org/rfc/rfc4627.txt) से: _ "JSON टेक्स्ट यूनिकोड में एन्कोड किया जाएगा। डिफ़ॉल्ट एन्कोडिंग यूटीएफ -8 है। "_ यदि वेब एप्लिकेशन इसे स्वीकार नहीं करता है, तो यह JSON स्वीकार नहीं करता है। – McDowell

उत्तर

2

आप

charset=UTF-8 

एन्कोडिंग मजबूर करने के लिए सेट करने का प्रयास कर सकता है।

+0

दुर्भाग्यवश इससे मदद नहीं मिली (इसे http शीर्षलेख में सेट करना) – cdbeelala89

0

आप जीसन से गुजरने से पहले दशमलव इकाइयों में उमलॉट्स को एन्कोड कर सकते हैं। जेसन से आप इन इकाइयों को डीकोड कर सकते हैं।

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

मैं यह कैसे करूँगा? आम तौर पर मैं सिर्फ toGson (वस्तु) करने के लिए। ऑब्जेक्ट वेरिएबल को वैल्यू सेट करने से पहले – cdbeelala89

+0

आप टीआई जेसन को कन्वर्ट करना चाहते हैं स्ट्रिंग को एन्कोड करने के लिए उपरोक्त विधि को लागू करें। –

6

मैं JSON में एक वेब सेवा करने के लिए ऊमलायूट गुजर ही समस्या थी। वेबसर्वर उन वर्णों को सही ढंग से डीकोड नहीं कर सका।

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

धन्यवाद, मेरे मामले में httpParams गायब हिस्सा थे। – Locked