2013-08-26 21 views
0

我正在使用Balckberry移動應用程序。它獲取一些數據並使用javax.microedition.io.Connection對象將其發佈到java.io.OutputStream上的服務器應用程序。雖然我的設置「的Content-Type」屬性Connection但仍然在服務器端無法獲得正確的編碼字符串將數據寫入OutputStream時的編碼問題

請注意:

  • 服務器正常工作與任何UTF-8編碼字符串,因爲我已經驗證使用 Poster
  • XML是在客戶端正確編碼之前寫入OutputStream,因爲我可以看到它在調試模式

任何人都可以科幻nd一個小故障下面是代碼。

  // Client side code 

      // xml is String xml and is correctly encoded, I can see Arabic or Chinese character it in debug mode 
      byte[] requestByte = xml.getBytes(); 

      // compress request bytes array 
      // initialize connection 

      // set connection properties 
      con.setRequestMethod(HttpConnection.POST); 
      con.setRequestProperty("User-Agent", "Profile/MIDP-2.0 Configuration/CLDC-1.0"); 
      con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
      con.setRequestProperty("Content-Encoding", "UTF-8"); 

      os = con.openOutputStream(); 
      InputStream in = new ByteArrayInputStream(requestByte); 
      byte[] buffer = new byte[4096]; 
      int bytesRead = 0; 
      while ((bytesRead = in.read(buffer)) > 0) { 
       os.write(buffer, 0, bytesRead); 
      } 

回答

2

幾件事情:

1)我假定你所謂的XML變量,實際上是一個字符串。在這種情況下,你真正想要的是

byte [] requestByte = xml.getBytes(「UTF-8」);

2)似乎有一些多餘的代碼在這裏:

 InputStream in = new ByteArrayInputStream(requestByte); 
     byte[] buffer = new byte[4096]; 
     int bytesRead = 0; 
     while ((bytesRead = in.read(buffer)) > 0) { 
      os.write(buffer, 0, bytesRead); 
     } 

爲什麼不更換這一切:

os.write(requestByte,0,requestByte.length);

+0

是的,這已經成功了。但是,是否需要在'Content-Encoding'的'Connection'屬性中設置。 關於冗餘代碼:在這個應用程序中,大部分時間設備發送批量數據,對於慢速連接,我們正在以較小的塊讀取數據 –