5

Uzak bir sunucudan bazı JSON nesnelerini getirmem gerekiyor ve bunun için, bazı garip veriler elde edildiğini düşündüğüm dışında, bu harika işlevden yararlanıyorum. kodlamak için ASCII karakter kümesi kullanmaktadır.Java'da HTTP yanıtında karakter dizisi kodlamasını nasıl değiştirebilirim?

i olan doğru geçirerek

public HttpResponse call(String serviceURL,String serviceHost,String namespace,String methodName,String payloadKey, String payloadValue) throws ClientProtocolException,IOException,JSONException 
    { 
      HttpResponse response = null; 
      HttpContext HTTP_CONTEXT = new BasicHttpContext(); 
      HTTP_CONTEXT.setAttribute(CoreProtocolPNames.USER_AGENT, "Mozilla/5.0"); 
      HttpPost httppost = new HttpPost(serviceURL); 
      httppost.setHeader("User-Agent",Constants.USER_AGENT_BROWSER_FIREFOX); 
      httppost.setHeader("Accept", "application/json, text/javascript, */*"); 
      httppost.setHeader("Accept-Language","en-US,en;q=0.8"); 
      httppost.setHeader("Content-Encoding", "foo-1.0"); 
      httppost.setHeader("Content-Type", "application/json; charset=UTF-8"); 
      httppost.setHeader("X-Requested-With","XMLHttpRequest"); 
      httppost.setHeader("Host",serviceHost); 
      httppost.setHeader("X-Foo-Target", String.format("%s.%s", namespace,methodName)); 
      /*Making Payload*/ 
      JSONObject objectForPayload = new JSONObject(); 
      objectForPayload.put(payloadKey, payloadValue); 
      StringEntity stringentity = new StringEntity(objectForPayload.toString()); 
      httppost.setEntity(stringentity); 
      response = client.execute(httppost); 
      return response; 


    } 

Tüm bu başlıkları kullandığımı thw yönteminin altında bulup seni Mozilla aşina değilseniz Google krom veya Kundakçı eklenti öğeyi denetle aracılığıyla aynı doğruladıktan Lütfen .

Sorun şu ki, çoğu zaman okunabilir verileri alıyorum ancak bazen okunamayan veriyi alıyorum.

Tutulma kullanarak hata ayıklama yaptım ve wrappedEntity altındaki karakter dizisinin "US-ASCII" olarak gösterildiğini fark ettim. enter image description here

Referans için jpg'yi ekliyorum Birisi lütfen bana response = client.execute(httppost); yapmadan önce yanıtın ASCII'den UTF-8'e nasıl değiştirebileceğimi söyleyin. PS: Başlıkta charset = utf-8 geçtiğimi ve tam olarak üstbilgileri iletdiğim firebug ve google chrome kullanarak doğrulamayı yaptığımı fark ettiniz.

önceden daha net

Teşekkür resmi görmek için lütfen yakınlaştırın

cevap

1

Bir Accept-kodlayan başlık eklemek ve UTF-8 sanmıyorum

+1

Bunu denedim ama aynı sonucu çalışmadı 'httppost.setHeader (" Accept-Encoding "," UTF-8 ");' – bourne

1

bu ayarlamanız gerekebilir başlıklarınızla ilgili bir sorun, sanırım bu sizin dizinizde bir sorun. Sadece ust-8 yazdığınız dizenin utf-8 olduğu anlamına gelmediğini ve bunun dize nasıl kodlandığına ve "payloadValue" içinde ne olduğuna bağlı olduğunu ifade eder.

Her zaman kabloya göndermeden önce doğru bir şekilde yeniden kodlayın, örneğin:

objectForPayload.put(payloadKey, payloadValue); 
StringEntity stringentity = new StringEntity(
    new String(
     objectForPayload.toString().getBytes(), 
     "UTF8")); 

Bunun sizin için uygun olup olmadığını görün.

+0

Cevabınız için teşekkürler, ama işe yaramadı, ama karışıklık çünkü karışıklık çünkü sadece yükte geçmekte olduğum bir json nesnesi ve utf-8'de kodlama yapıp yapmadığım önemli değil. ow karakterini değiştirdiğini belirten kod çözme ben hangi yapamayacağımı düşünüyorum – bourne

10

Bu sorunu yalnızca benzer bir sorunla karşılaşabilecek kişilerden söz ederek çözebildim. HttpEntity entity = response.getEntity(); kullanarak ve benim yanıt beri tepkisi ilk kimliklerini kazanmaları dizesine bir json nesnesi dönüştürmek varlık alıyorduk ama bu responseJsonObject = new JSONObject(EntityUtils.toString(entity,"UTF-8"));

gibi "UTF-8" bir şeyler kullandıktan sonra daha önce ben sadece responseJsonObject = new JSONObject(EntityUtils.toString(entity));

yapıyordu
+0

kendi cevaplarınızı da kabul edebilirsiniz – CyprUS

+1

Ben de aynı sorunu yaşadım, nerede "IOUtils.toString (entity.getContent()," UTF-8 ") ya da çalışmıyordu. 'EntityUtils' olarak değiştirmek işi yaptı – divillysausages