2013-08-26 19 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'属性中设置。 关于冗余代码:在这个应用程序中,大部分时间设备发送批量数据,对于慢速连接,我们正在以较小的块读取数据 –